我的背景 - 在Hadoop世界4周大。使用Cloudera的Hadoop VM在Hive,Pig和Hadoop中稍微涉足一下。已阅读Google关于Map-Reduce和GFS(PDF link)的论文。
我明白那个-
我的问题 - 当一个人(比如猪)可以达到目的时,双方的目标是什么。是不是因为猪被雅虎传福音!和Facebook的蜂巢?
看看来自Yahoo!的Pig架构师Alan Gates的这个post,它比较了何时使用像Hive而不是Pig的SQL。他就像Pig(与声明性SQL)这样的过程语言及其对数据流设计者的实用性的有用性提出了一个非常有说服力的案例。
我在下面找到了有用的链接,以探索如何以及何时使用HIVE和PIG。
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/
Hive不是一个完整的数据库。 Hadoop和HDFS的设计约束和限制对Hive可以做的事情施加了限制。
Hive最适合数据仓库应用程序,其中
1)分析相对静态的数据,
2)不需要快速响应时间,并且
3)当数据没有迅速变化时。
Hive不提供OLTP,在线事务处理所需的关键功能。它更接近于OLAP工具,即在线分析处理。因此,Hive最适合数据仓库应用程序,其中维护和挖掘大型数据集以获得洞察力,报告等。
简单来说,Pig是一个用于创建与Hadoop一起使用的MapReduce程序的高级平台,使用pig脚本我们将把大量数据处理成所需的格式。
获得处理后的数据后,将处理后的数据保存在HDFS中,以便以后处理,以获得所需的结果。
在存储的已处理数据之上,我们将应用HIVE SQL命令来获得所需的结果,内部此hive sql命令运行MAP Reduce程序。
简而言之,对两者进行非常高级的概述:
1)猪是关于hadoop的关系代数
2)Hive是一个SQL over hadoop(比Pig高一级)
哪些HIVE可以做哪些在PIG中是不可能的?
可以使用HIVE进行分区,但不能在PIG中进行分区,这是一种绕过输出的方法。
PIG可以做什么,这在HIVE中是不可能的?
位置参考 - 即使您没有字段名称,我们也可以使用像$ 0这样的位置 - 第一个字段,第二个字段为1,依此类推。
另一个根本区别是,PIG不需要模式来编写值,但HIVE确实需要一个模式。
您可以使用JDBC和其他人从任何外部应用程序连接到HIVE,但不能使用PIG。
注意:两者都运行在HDFS(hadoop分布式文件系统)之上,语句转换为Map Reduce程序。
当我们在某种意义上使用Hadoop
时,这意味着我们正在尝试进行大量数据处理。数据处理的最终目标是从中生成内容/报告。
所以它内部包含2个主要活动:
1)加载数据处理
2)生成内容并将其用于报告/等。
加载/数据处理 - >猪会有所帮助。
这有助于作为ETL(我们可以使用猪脚本执行etl操作。)。
处理结果后,我们可以使用配置单元根据处理结果生成报告。
Hive:它建立在hdfs之上,用于仓库处理。
我们可以使用来自pig生成的已处理内容的hive轻松生成临时报告。
猪吃任何东西!这意味着它可以使用非结构化数据。
Hive需要架构。
一般来说,Pig对ETL类型的工作负载很有用。例如,您需要每天对数据进行一组转换。
当您需要运行adhoc查询或只想浏览数据时,Hive会闪耀。它有时可以充当可视化层(Tableau / Qlikview)的界面。
两者都是必不可少的,有不同的用途
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”文章中查看nut shell中的Pig Vs Hive Comparison
Hive在PIG方面优于:分区,服务器,Web界面和JDBC / ODBC支持。
一些差异:
我相信你问题的真正答案是它们是独立的项目,并没有集中协调的目标。它们在早期处于不同的空间,并且随着两个项目的扩展而逐渐与时间重叠。
从Hadoop O'Reilly的书中解读:
Pig:用于探索非常大的数据集的数据流语言和环境。
Hive:分布式数据仓库
您可以使用pig / hive查询获得类似的结果。主要区别在于理解/编写/创建查询的方法。
猪往往会创建一个数据流:小步骤,在每个步骤中你做一些处理 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精明的用户或其他工具,如Tableau / 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
给出了所有方面。如果您处于混乱状态,那么您必须看到该网页。