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

我明白——

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

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


当前回答

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

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

1)加载数据处理

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

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

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

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

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

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

其他回答

看看“dezyre”文章中关于猪和蜂巢的坚果壳比较

Hive在分区、服务器、Web接口和JDBC/ODBC支持方面优于PIG。

一些差异:

Hive is best for structured Data & PIG is best for semi structured data Hive is used for reporting & PIG for programming Hive is used as a declarative SQL & PIG as a procedural language Hive supports partitions & PIG does not Hive can start an optional thrift based server & PIG cannot Hive defines tables beforehand (schema) + stores schema information in a database & PIG doesn't have a dedicated metadata of database Hive does not support Avro but PIG does. EDIT: Hive supports Avro, specify the serde as org.apache.hadoop.hive.serde2.avro Pig also supports additional COGROUP feature for performing outer joins but hive does not. But both Hive & PIG can join, order & sort dynamically.

您可以通过pig/hive查询实现类似的结果。主要的区别在于理解/编写/创建查询的方法。

Pig倾向于创建数据流:在每个步骤中进行一些处理的小步骤 Hive提供了类似SQL的语言来操作数据,因此从RDBMS转换更容易(Pig对于没有SQL经验的人来说更容易)

同样值得注意的是,对于Hive来说,你可以很好的界面来处理这些数据(Beeswax for HUE,或Hive web界面),它还为你提供了关于你的数据的信息(模式等)的亚metastore,这是关于你的数据的一个有用的中心信息。

我同时使用Hive和Pig,用于不同的查询(我使用它可以更快/更容易地编写查询,我这样做主要是临时查询)-它们可以使用相同的数据作为输入。但目前我的大部分工作都是通过Beeswax完成的。

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

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

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

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

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

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

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

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

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

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

猪什么都吃!这意味着它可以使用非结构化数据。

Hive需要一个模式。