猪和蜂巢之间的区别? 为什么都有?

我的背景 – Hadoop世界中的4周岁。 使用Cloudera的Hadoop VM在Hive,Pig和Hadoop中混了一下。 阅读了Google关于Map-Reduce和GFS的论文( PDF链接 )。

我明白那个-

  • 猪的语言猪拉丁语是一种从程序员的思维方式转变为像声明式编程风格的SQL,Hive的查询语言与SQL非常相似。

  • 猪坐在Hadoop之上,原则上也可以坐在Dryad之上。 我可能是错的,但Hive与Hadoop紧密相连。

  • Pig Latin和Hive命令都编译为Map和Reduce作业。

我的问题 – 当一个人(比如说猪)能够达到目的时,两者的目标是什么? 是不是因为猪被雅虎传福音? 和Facebook的蜂巢?

请看雅虎的Pig架构师Alan Gates的这篇文章 ,比较何时使用像Hive这样的SQL而不是Pig。 他提出了一个非常有说服力的例子,像Pig这样的程序语言(对比声明式SQL)及其对数据streamdevise者的实用性。

Hive旨在吸引适合SQL的社区。 其理念是我们不需要另一种脚本语言。 Hive支持以用户select的语言(可embedded在SQL子句中)映射和减less转换脚本。 它被广泛用于Facebook的分析师舒适的SQL以及数据挖掘者在Python编程。 Pig的SQL兼容性工作已经被AFAIK放弃 – 所以两个项目的区别非常明显。

支持SQL语法也意味着可以与现有的BI工具(如Microstrategy)集成。 Hive有一个ODBC / JDBC驱动程序(这是一个正在进行的工作),应该允许这个在不久的将来发生。 它也开始增加对索引的支持,这些索引应该允许支持在这样的环境中常见的深入查询。

最后 – 这与问题直接无关 – Hive是执行分析查询的框架。 虽然它的主要用途是查询平面文件,但没有理由不能查询其他商店。 目前Hive可以用来查询存储在Hbase中的数据(这是一个类似于大多数RDBMS中的关键值存储),HadoopDB项目已经使用Hive来查询联合的RDBMS层。

我发现这是最有帮助的(虽然,这是一岁) – https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html

它具体谈到猪vs蜂巢,以及他们在雅虎工作的时间和地点。 我发现这非常有见地。 一些有趣的笔记:

对数据集进行增量更改/更新:

相反,join新的增量数据,并将结果与​​前一次全连接的结果一起使用是正确的方法。 这只需要几分钟。 标准的数据库操作可以在Pig Latin中以增量的方式实现,使Pig成为这个用例的一个很好的工具。

通过stream式传输使用其他工具:

猪与stream的集成也使得研究人员可以轻松地将他们已经debugging过的Perl或Python脚本放在一个小的数据集上,并运行在一个庞大的数据集上。

在使用Hive进行数据仓库时:

在这两种情况下,关系模型和SQL都是最合适的。 实际上,数据仓库已经成为SQL历史上的核心用例之一。 它有正确的结构来支持分析师想要使用的查询和工具types。 它已经被现场的工具和用户所使用。

Hadoop子项目Hive为Hadoop提供SQL接口和关系模型。 Hive团队已经开始通过ODBC等接口与BI工具集成。

从“dezyre”的文章中看看Pig Vs Hive的比较

在分区,服务器,Web界面和JDBC / ODBC支持方面, HivePIG要好。

有些区别:

  1. Hive最适合结构化数据PIG最适合半结构化数据

  2. Hive用于编程 报告PIG

  3. Hive被用作声明式SQLPIG作为过程语言

  4. Hive支持分区PIG不支持

  5. Hive可以启动一个可选的基于节点的服务器PIG不能

  6. Hive事先定义表( 模式 )+将模式信息存储在数据库中& PIG没有数据库的专用元数据

  7. Hive不支持Avro,但是PIG支持。 编辑:蜂巢支持Avro,指定serde作为org.apache.hadoop.hive.serde2.avro

  8. 还支持额外的COGROUPfunction来执行外部连接,但是configuration单元不支持。 但是Hive&PIG都可以dynamicjoin,sorting和sorting

我相信你的问题的真正答案是他们是独立的项目,没有中央协调的目标。 他们早期在不同的空间,随着两个项目的扩展,他们已经与时间重合。

从Hadoop O'Reilly的书中解释:

Pig:用于探索非常大的数据集的数据stream语言和环境。

Hive:分布式数据仓库

您可以通过猪/蜂巢查询获得类似的结果。 主要区别在于理解/写作/创build查询的方法。

猪倾向于创造一个数据stream:在每个你做一些处理的小步骤
Hive提供了类似于SQL的语言来处理数据,所以从RDBMS进行转换要容易得多(对于不熟悉SQL的人来说,Pig可以更容易)

另外值得注意的是,对于Hive,您可以使用这个数据(Beeswax for HUE或Hive Web界面)来处理这个数据,它还可以让您获得有关您的数据(模式等)的信息,这些数据作为有关您的数据的中央信息。

我使用Hive和Pig两种方法来处理不同的查询(我使用那个可以更快速/更容易地编写查询的查询),他们可以使用相同的数据作为input。 但目前我通过蜂蜡做了很多工作。

Pig允许在pipe道中的任何点加载数据和用户代码。 如果数据是stream数据,例如来自卫星或仪器的数据,则这可能是特别重要的。

基于RDBMS的Hive需要首先导入(或加载)数据,然后才能进行处理。 因此,如果您在stream式数据上使用Hive,则必须不断填充存储桶(或文件),并在每个填充的存储桶上使用configuration单元,同时使用其他存储桶来存储新到达的数据。

猪也使用懒惰的评价。 它使编程变得更加简单,并且可以用更多的自由来以不同的方式分析数据,而不像像Hive这样的SQL语言。 所以如果你真的想分析一些非结构化数据中的matrix或模式,并想对它们进行有趣的计算,那么你可以走一段距离,而在Hive的时候,你需要其他的东西来处理结果。

Pig在数据导入中速度更快,但实际执行速度要比RDBMS友好的语言(如Hive)慢。

猪非常适合并行化,因此它可能对数据集非常庞大的系统具有优势,例如,在系统中,更关心结果的吞吐量而不是延迟(得到任何特定数据结果的时间)的系统。

在此链接中阅读PIG和HIVE之间的区别。

http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features

所有的方面都给出了。 如果你在select的混乱,那么你必须看到该网页。

蜂巢与猪 –

Hive是SQL界面,它允许精明的用户或其他工具,如Tableu / Microstrategy /任何其他工具或语言具有SQL接口..

PIG更像是一个ETL的pipe道…一步一步的命令,如声明variables,循环,迭代,条件语句等

当我想要编写复杂的逐步逻辑时,我更喜欢将Pig脚本写在configuration单元QL上。 当我很舒服地写一个单一的SQL拉数据我想我使用Hive。 对于configuration单元,您需要在查询之前定义表格(就像在RDBMS中一样)

两者的目的是不同的,但在引擎盖下,两者都是一样的,转换为地图缩减程序。另外,Apache开源社区为这两个项目增加了越来越多的function

  1. Pig-latin是数据stream风格,更适合软件工程师。 而sql更适合习惯sql的分析人员。 对于复杂的任务,对于configuration单元,您必须手动创build临时表来存储中间数据,但对于猪来说不是必需的。

  2. 猪拉丁适用于复杂的数据结构(如小图)。 猪身上有一个叫做DataBag的数据结构,它是Tuple的一个集合。 有时你需要计算涉及多个元组的指标(在元组之间有一个隐藏的链接,在这种情况下,我将其称为图)。 在这种情况下,编写一个UDF来计算涉及多个元组的度量是非常容易的。 当然这可以在蜂巢中完成,但是它不像猪那样方便。

  3. 在我看来,在UDF中写UDF比在Hive中更容易。

  4. Pig没有元数据支持(或者是可选的,将来可能会集成hcatalog)。 Hive将表的元数据存储在数据库中。

  5. 你可以在本地环境中debugging猪脚本,但是这样做很难。 原因是第3点。您需要在本地环境中设置configuration单元元数据,非常耗时。

我发现下面有用的链接,探讨如何以及何时使用HIVE和PIG。

http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/

简单来说,Pig是创buildHadoop使用的MapReduce程序的高级平台,使用猪脚本我们将把大量的数据处理成所需的格式。

一旦获得处理的数据,将处理的数据保存在HDFS中以供以后处理以获得期望的结果。

在存储的处理数据之上,我们将应用HIVE SQL命令来获得所需的结果,在内部,这个configuration单元sql命令运行MAP Reduce程序。

从链接: http : //www.aptibook.com/discuss-technical ?uid= tech-hive4 &question= What-kind-of-datawarehouse-application-is-suitable-for-Hive ?

configuration单元不是一个完整的数据库。 Hadoop和HDFS的devise约束和局限性限制了Hive可以执行的操作。

Hive最适合于数据仓库应用程序

1)分析相对静态的数据,

2)不需要快速响应时间

3)数据没有快速变化时。

Hive不提供OLTP所需的关键function,即联机事务处理。 更接近于成为OLAP工具,在线分析处理。 因此,Hive最适合于数据仓库应用程序,在这些应用程序中维护一个大型数据集并挖掘洞察力,报告等。

总而言之,要对这两方面进行高度概括:

1)猪是一个关于hadoop的关系代数

2)Hive是一个超过Hadoop的SQL(比Pig高一级)

从某种意义上说,我们使用Hadoop时,意味着我们正在尝试进行大量的数据处理。数据处理的最终目标是生成内容/报告。

所以它内部包含2个主要活动1)加载数据处理2)生成内容并将其用于报告/等等。

加载/数据处理 – >猪会有所帮助。 这有助于作为一个ETL(我们可以使用pig脚本执行etl操作)。一旦处理结果,我们可以使用configuration单元根据处理结果生成报告。

Hive:它build立在hdfs之上,用于仓库处理。 我们可以使用从猪生成的处理内容的configuration单元轻松地创build报告。

什么HIVE可以做什么这是不可能在猪吗?

分区可以使用HIVE而不是PIG来完成,这是绕过输出的一种方法。

HIV能做什么?

位置引用 – 即使您没有字段名称,我们也可以使用像$ 0这样的位置 – 对于第一个字段,对于第二个字段$ 1,等等。

另一个根本区别是,PIG不需要模式来编写值,但是HIVE确实需要一个模式。

您可以使用JDBC和其他方式从任何外部应用程序连接到HIVE,但不能与PIG连接。

注意:两者都在HDFS(hadoop分布式文件系统)之上运行,并且语句被转换为Map Reduce程序。

猪吃东西! 这意味着它可以消耗非结构化数据。

Hive需要一个模式。

猪一般来说对于ETL类的工作量是有用的。 例如,您需要每天对数据进行一组转换。

当你需要运行adhoc查询或者只是想探索数据的时候,Hive会闪耀。 它有时可以作为可视化图层的接口(Tableau / Qlikview)。

两者都是必不可less的,为不同的目的