我的背景——在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。

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

其他回答

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

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

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

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

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

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

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

我相信你的问题的真正答案是,它们是/是独立的项目,没有集中协调的目标。他们在早期处于不同的空间,随着两个项目的扩展,随着时间的推移逐渐重叠。

摘自Hadoop O'Reilly的书:

Pig:一种数据流语言 探索环境非常大 数据集。 Hive:分布式数据仓库

在这个链接中阅读PIG和HIVE的区别。

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

给出了所有的方面。如果你不知道该选择哪个,那么你必须看看那个网页。

我发现这个是最有帮助的(尽管它已经有一年的历史了)——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.

Hive的设计是为了吸引一个熟悉SQL的社区。它的哲学是我们不需要另一种脚本语言。Hive支持用户选择语言的map和reduce转换脚本(可以嵌入到SQL子句中)。它在Facebook上被熟悉SQL的分析人员以及使用Python编程的数据挖掘人员广泛使用。在Pig中SQL兼容性的努力已经被放弃了,所以这两个项目之间的区别是非常明显的。

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

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