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