我的背景——在Hadoop世界工作了4周。使用Cloudera的Hadoop VM对Hive, Pig和Hadoop进行了一些尝试。已阅读谷歌关于Map-Reduce和GFS的论文(PDF链接)。
我明白——
猪的语言猪的拉丁语是一种转变
来自(适合程序员的思维方式)
SQL喜欢声明式的
编程和Hive的查询语言密切相关
类似于SQL。
Pig位于Hadoop之上
原则也可以凌驾于之上
德律阿得斯。我可能错了,但蜂巢错了
与Hadoop紧密耦合。
都是Pig Latin和Hive命令
编译映射和减少作业。
我的问题是——当一个(比如猪)可以达到目的时,拥有两者的目标是什么?难道只是因为雅虎宣传了Pig !和Facebook的Hive ?
看看“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是基于RDBMS的,它需要首先导入(或加载)数据,然后才能对其进行处理。因此,如果您在流数据上使用Hive,您将不得不不断填充桶(或文件),并在每个填充桶上使用Hive,同时使用其他桶来继续存储新到达的数据。
Pig也使用惰性求值。它使编程变得更加容易,人们可以用它来以不同的方式分析数据,比在像Hive这样的SQL类语言中更自由。因此,如果你真的想分析一些你拥有的非结构化数据中的矩阵或模式,并想对它们进行有趣的计算,使用Pig你可以走得很远,而使用Hive,你需要其他东西来处理结果。
Pig在数据导入方面更快,但在实际执行方面比像Hive这样的RDBMS友好语言要慢。
Pig非常适合并行化,因此它可能在数据集庞大的系统中具有优势,即在您更关心结果吞吐量而不是延迟(获得任何特定结果数据的时间)的系统中。
您可以通过pig/hive查询实现类似的结果。主要的区别在于理解/编写/创建查询的方法。
Pig倾向于创建数据流:在每个步骤中进行一些处理的小步骤
Hive提供了类似SQL的语言来操作数据,因此从RDBMS转换更容易(Pig对于没有SQL经验的人来说更容易)
同样值得注意的是,对于Hive来说,你可以很好的界面来处理这些数据(Beeswax for HUE,或Hive web界面),它还为你提供了关于你的数据的信息(模式等)的亚metastore,这是关于你的数据的一个有用的中心信息。
我同时使用Hive和Pig,用于不同的查询(我使用它可以更快/更容易地编写查询,我这样做主要是临时查询)-它们可以使用相同的数据作为输入。但目前我的大部分工作都是通过Beeswax完成的。