我的背景——在Hadoop世界工作了4周。使用Cloudera的Hadoop VM对Hive, Pig和Hadoop进行了一些尝试。已阅读谷歌关于Map-Reduce和GFS的论文(PDF链接)。

我明白——

猪的语言猪的拉丁语是一种转变 来自(适合程序员的思维方式) SQL喜欢声明式的 编程和Hive的查询语言密切相关 类似于SQL。 Pig位于Hadoop之上 原则也可以凌驾于之上 德律阿得斯。我可能错了,但蜂巢错了 与Hadoop紧密耦合。 都是Pig Latin和Hive命令 编译映射和减少作业。

我的问题是——当一个(比如猪)可以达到目的时,拥有两者的目标是什么?难道只是因为雅虎宣传了Pig !和Facebook的Hive ?


当前回答

有什么是HIVE可以做到的,而PIG做不到的?

分区可以使用HIVE完成,但不能在PIG中完成,这是一种绕过输出的方式。

什么是PIG可以做的,而在HIVE中是不可能的?

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

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

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

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

其他回答

这里有一些使用Pig或Hive的附加链接。

http://aws.amazon.com/elasticmapreduce/faqs/#hive-8

http://www.larsgeorge.com/2009/10/hive-vs-pig.html

我发现这个是最有帮助的(尽管它已经有一年的历史了)——http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

它特别谈到了Pig vs Hive,以及他们在雅虎的工作时间和地点。我发现这很有见地。一些有趣的笔记:

关于数据集的增量更改/更新:

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

关于通过流媒体使用其他工具:

猪与流媒体的集成也使研究人员很容易 使用他们已经调试过的Perl或Python脚本 数据集,并在一个巨大的数据集上运行。

关于使用Hive进行数据仓库:

In both cases, the relational model and SQL are the best fit. Indeed, data warehousing has been one of the core use cases for SQL through much of its history. It has the right constructs to support the types of queries and tools that analysts want to use. And it is already in use by both the tools and users in the field. The Hadoop subproject Hive provides a SQL interface and relational model for Hadoop. The Hive team has begun work to integrate with BI tools via interfaces such as ODBC.

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

所以它内部由两个主要活动组成:

1)加载数据处理

2)生成内容并用于报告等。

加载/数据处理->猪将是有帮助的。

这有助于ETL(我们可以使用pig脚本执行ETL操作)。

一旦处理了结果,我们可以使用hive根据处理的结果生成报告。

Hive:它构建在hdfs之上,用于仓库处理。

我们可以很容易地使用hive从pig生成的经过处理的内容生成adhoc报告。

简而言之,要对两者进行一个非常高水平的概述:

1) Pig是hadoop上的关系代数

2) Hive是一个SQL over hadoop(比Pig高一级)

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

Hive是基于RDBMS的,它需要首先导入(或加载)数据,然后才能对其进行处理。因此,如果您在流数据上使用Hive,您将不得不不断填充桶(或文件),并在每个填充桶上使用Hive,同时使用其他桶来继续存储新到达的数据。

Pig也使用惰性求值。它使编程变得更加容易,人们可以用它来以不同的方式分析数据,比在像Hive这样的SQL类语言中更自由。因此,如果你真的想分析一些你拥有的非结构化数据中的矩阵或模式,并想对它们进行有趣的计算,使用Pig你可以走得很远,而使用Hive,你需要其他东西来处理结果。

Pig在数据导入方面更快,但在实际执行方面比像Hive这样的RDBMS友好语言要慢。

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