我的背景 - 在Hadoop世界4周大 . 在Map-Reduce和GFS(PDF link)上使用Cloudera _1252819的论文在Hive,Pig和Hadoop中略微涉足 .
我明白那个-
-
Pig的语言Pig Latin是一种转变(适合程序员认为的方式)SQL就像声明式编程风格和Hive的查询语言非常类似于SQL .
-
Pig坐在Hadoop之上,原则上也可以坐在Dryad之上 . 我可能错了,但Hive与Hadoop紧密相关 .
-
Pig Latin和Hive命令都编译为Map和Reduce作业 .
我的问题 - 当一个人(比如猪)可以达到目的时,双方的目标是什么 . 是不是因为猪被雅虎传福音!和Facebook的蜂巢?
19 回答
以下是使用Pig或Hive的一些其他链接 .
http://aws.amazon.com/elasticmapreduce/faqs/#hive-8
http://www.larsgeorge.com/2009/10/hive-vs-pig.html
简单来说,Pig是一个用于创建与Hadoop一起使用的MapReduce程序的高级平台,使用pig脚本我们将把大量数据处理成所需的格式 .
获得处理后的数据后,将处理后的数据保存在HDFS中,以便以后处理,以获得所需的结果 .
在存储的已处理数据之上,我们将应用HIVE SQL命令来获得所需的结果,内部此hive sql命令运行MAP Reduce程序 .
看看来自Yahoo!的Pig架构师Alan Gates的这个post,它比较了何时使用像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层 .
我在下面找到了有用的链接,以探索如何以及何时使用HIVE和PIG .
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/
我觉得这个最有帮助(虽然它已经有一年了) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo
它专门讨论了Pig vs Hive以及他们在雅虎工作的时间和地点 . 我发现这非常有见地 . 一些有趣的笔记:
对数据集的增量更改/更新:
通过流媒体使用其他工具:
使用Hive进行数据仓库:
从"dezyre"文章中查看 Pig Vs Hive nut shell中的比较
Hive 优于 PIG in:分区,服务器,Web界面和JDBC / ODBC支持 .
一些差异:
Hive 最适用于结构化数据, PIG 最适合半结构化数据
Hive 用于报告& PIG 用于编程
Hive 用作声明性SQL& PIG 作为过程语言
Hive 支持分区& PIG 不支持
Hive 可以启动一个可选的基于thrift的服务器& PIG 不能
Hive 预先定义表(schema)将架构信息存储在数据库中 PIG 没有数据库的专用元数据
Hive 不支持Avro但是 PIG . 编辑:Hive支持Avro,将serde指定为org.apache.hadoop.hive.serde2.avro
Pig 还支持执行外连接的其他COGROUP功能,但配置单元不支持 . 但是 Hive & PIG 都可以动态加入,排序和排序 .
我相信你问题的真正答案是它们是独立的项目,并没有集中协调的目标 . 它们在早期处于不同的空间,并且随着两个项目的扩展而逐渐与时间重叠 .
从Hadoop O'Reilly的书中解读:
您可以使用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非常适合并行化,因此它可能对数据集很大的系统具有优势,即在系统中您更关注结果的吞吐量而不是延迟(获取任何特定结果数据的时间) .
阅读此链接中的PIG和HIVE之间的区别 .
http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features
给出了所有方面 . 如果您处于混乱状态,那么您必须看到该网页 .
Hive Vs Pig-
Hive是SQL接口,它允许sql精明的用户或其他工具,如Tableu / Microstrategy /任何其他工具或具有sql接口的语言 .
PIG更像是一个ETL管道......一步一步的命令,如声明变量,循环,迭代,条件语句等 .
当我想编写复杂的逐步逻辑时,我更喜欢在hive QL上编写Pig脚本 . 当我很乐意编写单个sql来提取数据时,我希望我使用Hive . 对于hive,您需要在查询之前定义表(就像在RDBMS中一样)
两者的目的不同但是在幕后,两者都做同样的事情,转换为map reduce程序 . 而且Apache开源社区也为这两个项目添加了越来越多的功能
Pig-latin是数据流式,更适合软件工程师 . 虽然sql更适合习惯于sql的分析人员 . 对于复杂的任务,对于配置单元,您必须手动创建临时表来存储中间数据,但对猪来说不是必需的 .
Pig-latin适用于复杂的数据结构(如小图) . 猪的数据结构称为DataBag,它是Tuple的集合 . 有时您需要计算涉及多个元组的度量(元组之间存在隐藏链接,在本例中我将其称为图形) . 在这种情况下,编写UDF非常容易计算涉及多个元组的指标 . 当然它可以在蜂巢中完成,但它不像在猪身上那么方便 .
在我看来,在猪身上写UDF比在Hive中更容易 .
Pig没有元数据支持,(或者它是可选的,将来可能会集成hcatalog) . Hive将表的元数据存储在数据库中 .
您可以在本地环境中调试pig脚本,但是hive很难做到这一点 . 原因是第3点 . 您需要在本地环境中设置配置单元数据,非常耗时 .
来自链接:http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-suitable-for-Hive?
Hive不是一个完整的数据库 . Hadoop和HDFS的设计约束和限制对Hive可以做的事情施加了限制 .
Hive最适合数据仓库应用程序,其中
1)分析相对静态的数据,
2)不需要快速响应时间,并且
3)当数据没有迅速变化时 .
Hive不提供OLTP,在线事务处理所需的关键功能 . 它更接近于OLAP工具,即在线分析处理 . 因此,Hive最适合数据仓库应用程序,其中维护和挖掘大型数据集以获得洞察力,报告等 .
简而言之,对两者进行非常高级的概述:
1)猪是关于hadoop的关系代数
2)Hive是一个SQL over hadoop(比Pig高一级)
What HIVE can do which is not possible in PIG?
可以使用HIVE进行分区,但不能在PIG中进行分区,这是一种绕过输出的方法 .
What PIG can do which is not possible in HIVE?
位置参考 - 即使您没有字段名称,我们也可以使用像$ 0这样的位置 - 第一个字段,第二个字段为1,依此类推 .
另一个根本区别是,PIG不需要模式来编写值,但HIVE确实需要一个模式 .
您可以使用JDBC和其他人从任何外部应用程序连接到HIVE,但不能使用PIG .
注意:两者都运行在HDFS(hadoop分布式文件系统)之上,语句转换为Map Reduce程序 .
当我们在某种意义上使用Hadoop时,这意味着我们正在尝试进行大量数据处理 . 数据处理的最终目标是从中生成内容/报告 .
所以它内部由2个主要活动组成1)加载数据处理2)生成内容并将其用于报告/等 .
加载/数据处理 - >猪会有所帮助 . 这有助于作为ETL(我们可以使用猪脚本执行etl操作 . )处理结果后,我们可以使用配置单元根据处理结果生成报告 .
Hive:它 Build 在hdfs之上,用于仓库处理 . 我们可以使用来自猪生成的处理内容中的配置单元轻松地生成特别报告 .
猪吃任何东西!这意味着它可以使用非结构化数据 .
Hive需要架构 .
一般来说,Pig对ETL类型的工作负载很有用 . 例如,您需要每天对数据进行一组转换 .
当您需要运行adhoc查询或只想浏览数据时,Hive会闪耀 . 它有时可以充当可视化层(Tableau / Qlikview)的界面 .
两者都是必不可少的,有不同的用途