我的背景 - 在Hadoop世界4周大.使用Cloudera的Hadoop VM在Hive,Pig和Hadoop中略微涉足.已阅读Google关于Map-Reduce和GFS的文章(PDF链接).
我明白那个-
Pig的语言Pig Latin是一种转变(适合程序员认为的方式)SQL就像声明式编程风格和Hive的查询语言非常类似于SQL.
猪坐在Hadoop之上,原则上也可以坐在Dryad之上.我可能错了,但Hive与Hadoop紧密相关.
Pig Latin和Hive命令都编译为Map和Reduce作业.
我的问题 - 当一个人(比如猪)可以达到目的时,双方的目标是什么.是不是因为猪被雅虎传福音!和Facebook的蜂巢?
查看来自Yahoo!的Pig架构师Alan Gates的这篇文章,该文章比较何时使用像Hive而不是Pig的SQL.他就像Pig(与声明性SQL)这样的过程语言及其对数据流设计者的实用性的有用性提出了一个非常有说服力的案例.
Hive旨在吸引适合SQL的社区.它的理念是我们不需要另一种脚本语言.Hive支持使用用户选择的语言映射和缩减转换脚本(可以嵌入SQL子句中).适用于SQL的分析师以及Python中的数据挖掘者编程广泛使用它.Pig的SQL兼容性工作已经被放弃了AFAIK--所以这两个项目的区别非常明显.
支持SQL语法也意味着可以与Microstrategy等现有BI工具集成.Hive有一个ODBC/JDBC驱动程序(这是一项正在进行的工作),应该允许在不久的将来发生这种情况.它也开始增加对索引的支持,这些索引应该允许支持在这种环境中常见的向下钻取查询.
最后 - 这与直接问题无关 - Hive是一个执行分析查询的框架.虽然它的主要用途是查询平面文件,但没有理由不能查询其他商店.目前,Hive可用于查询存储在Hbase中的数据(这是一个键值存储,就像在大多数RDBMS的内核中找到的那样),并且HadoopDB项目使用Hive来查询联合RDBMS层.
我发现这是最有帮助的(尽管这是一岁) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo
它专门讨论了Pig vs Hive以及他们在雅虎工作的时间和地点.我发现这非常有见地.一些有趣的笔记:
对数据集的增量更改/更新:
相反,加入新的增量数据并将结果与前一次完全连接的结果一起使用是正确的方法.这只需几分钟.可以在Pig Latin中以增量方式实现标准数据库操作,使Pig成为此用例的良好工具.
通过流媒体使用其他工具:
Pig与流的集成还使研究人员可以轻松地将他们已经调试过的Perl或Python脚本放在一个小型数据集上,并针对庞大的数据集运行它.
使用Hive进行数据仓库:
在这两种情况下,关系模型和SQL都是最合适的.实际上,数据仓库在其历史的大部分时间里一直是SQL的核心用例之一.它具有正确的结构,以支持分析师想要使用的查询和工具类型.它已经被该领域的工具和用户使用.
Hadoop子项目Hive为Hadoop提供了SQL接口和关系模型.Hive团队已经开始通过ODBC等接口与BI工具集成.
从"dezyre"文章中看一下坚果壳中的Pig Vs Hive Comparison
Hive在PIG方面优于:分区,服务器,Web界面和JDBC/ODBC支持.
一些差异:
Hive最适合结构化数据,PIG最适合半结构化数据
Hive用于报告和PIG用于编程
Hive用作声明性SQL和PIG作为过程语言
蜂巢支持分区和PIG不
蜂房可以启动一个可选的节俭基于服务器和PIG不能
Hive预先定义表(模式)+在数据库中存储模式信息,PIG没有数据库的专用元数据
Hive不支持Avro,但PIG支持Avro.编辑:Hive支持Avro,将serde指定为org.apache.hadoop.hive.serde2.avro
Pig还支持额外的COGROUP功能来执行外连接,但配置单元不支持.但是Hive和PIG都可以动态加入,订购和排序.
我相信你问题的真正答案是它们是独立的项目,并没有集中协调的目标.它们在早期处于不同的空间,并且随着两个项目的扩展而逐渐与时间重叠.
从Hadoop O'Reilly的书中解读:
Pig:用于探索非常大的数据集的数据流语言和环境.
Hive:分布式数据仓库
您可以使用pig/hive查询获得类似的结果.主要区别在于理解/编写/创建查询的方法.
Pig倾向于创建一个数据流:小步骤,每个进行一些处理
Hive为您提供类似SQL的语言来操作您的数据,因此从RDBMS转换更容易(对于没有早期经验的人来说,猪可以更容易用SQL)
值得注意的是,对于Hive,您可以使用这个数据(Beeswax for HUE或Hive Web界面)的良好界面,并且它还为您提供有关您的数据(模式等)的信息的Metastore,它可用作有关您数据的中央信息.
我使用Hive和Pig,用于不同的查询(我使用那个我可以更快/更容易地编写查询的方法,我这样做主要是临时查询) - 他们可以使用相同的数据作为输入.但目前我通过Beeswax做了很多工作.
Pig允许用户在管道中的任何位置加载数据和用户代码.如果数据是流数据,例如来自卫星或仪器的数据,则这尤其重要.
基于RDBMS的Hive需要首先导入(或加载)数据,然后才能对其进行处理.因此,如果您在流数据上使用Hive,则必须继续填充存储桶(或文件)并在每个已填充的存储桶上使用配置单元,同时使用其他存储桶来保存新到达的数据.
猪也使用懒惰的评价.它允许更容易编程,并且可以使用它以不同的方式分析数据,比像Hive这样的SQL语言更自由.因此,如果您真的想分析一些非结构化数据中的矩阵或模式,并希望对它们进行有趣的计算,那么使用Pig可以实现一些距离,而使用Hive时,您需要使用其他东西来处理结果.
Pig在数据导入方面更快,但实际执行速度比Hive等RDBMS友好语言慢.
Pig非常适合并行化,因此它可能对数据集很大的系统具有优势,即在系统中您更关注结果的吞吐量而不是延迟(获取任何特定结果数据的时间).
Hive Vs Pig-
Hive是SQL接口,它允许sql精明的用户或其他工具,如Tableu/Microstrategy /任何其他工具或具有sql接口的语言.
PIG更像是一个ETL管道......一步一步的命令,如声明变量,循环,迭代,条件语句等.
当我想编写复杂的逐步逻辑时,我更喜欢在hive QL上编写Pig脚本.当我很乐意编写单个sql来提取数据时,我希望我使用Hive.对于hive,您需要在查询之前定义表(就像在RDBMS中一样)
两者的目的不同但是在幕后,两者都做同样的事情,转换为map reduce程序.而且Apache开源社区也为这两个项目添加了越来越多的功能
阅读此链接中的PIG和HIVE之间的区别.
http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features
给出了所有方面.如果您处于混乱状态,那么您必须看到该网页.
Pig-latin是数据流风格,更适合软件工程师.虽然sql更适合习惯于sql的分析人员.对于复杂的任务,对于配置单元,您必须手动创建临时表来存储中间数据,但对猪来说不是必需的.
Pig-latin适用于复杂的数据结构(如小图).猪的数据结构称为DataBag,它是Tuple的集合.有时您需要计算涉及多个元组的度量(元组之间存在隐藏链接,在本例中我将其称为图形).在这种情况下,编写UDF以计算涉及多个元组的度量标准非常容易.当然它可以在蜂巢中完成,但它不像在猪身上那么方便.
在我看来,在猪身上写UDF比在Hive中更容易.
Pig没有元数据支持,(或者它是可选的,将来可能会集成hcatalog).Hive将表的元数据存储在数据库中.
您可以在本地环境中调试pig脚本,但是hive很难做到这一点.原因是第3点.您需要在本地环境中设置配置单元数据,非常耗时.
我在下面找到了有用的链接,以探索如何以及何时使用HIVE和PIG.
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/