猪和蜂巢的区别?为什么两者都有?

我的背景——在Hadoop世界工作了4周。使用Cloudera的Hadoop VM对Hive, Pig和Hadoop进行了一些尝试。已阅读谷歌关于Map-Reduce和GFS (PDF的链接)的论文。

我明白——

  • 猪的语言猪的拉丁语是一个转变 来自(适合程序员的思维方式) SQL喜欢声明式的 编程和Hive的查询语言密切相关 类似于SQL。李< / p > < / >

  • Pig位于Hadoop之上 原则也可以凌驾于之上 德律阿得斯。我可能错了,但蜂巢错了 与Hadoop紧密耦合。李< / p > < / >

  • Pig Latin和Hive命令

  • .编译映射和减少作业

我的问题是——当一个(比如猪)可以达到目的时,拥有两者的目标是什么?难道只是因为雅虎宣传了Pig !和Facebook的Hive ?

208693 次浏览

我相信你的问题的真正答案是,它们是/是独立的项目,没有集中协调的目标。他们在早期处于不同的空间,随着两个项目的扩展,随着时间的推移逐渐重叠。

摘自Hadoop O'Reilly的书:

Pig:数据流语言和 探索环境非常大 数据集。< / p >

Hive:分布式数据仓库

您可以通过pig/hive查询实现类似的结果。主要的区别在于理解/编写/创建查询的方法。

Pig倾向于创建数据流:在每个步骤中执行一些处理的小步骤 Hive为您提供了类似SQL的语言来操作您的数据,因此从RDBMS转换更容易(Pig对于没有SQL经验的人来说更容易)

同样值得注意的是,对于Hive来说,你可以很好的界面来处理这些数据(Beeswax for HUE,或Hive web界面),它还为你提供了关于你的数据的信息(模式等)的亚metastore,这是关于你的数据的一个有用的中心信息。

我同时使用Hive和Pig,用于不同的查询(我使用它可以更快/更容易地编写查询,我这样做主要是临时查询)-它们可以使用相同的数据作为输入。但目前我的大部分工作都是通过Beeswax完成的。

看看这个帖子来自Alan Gates, Yahoo!,这与使用Hive而不是Pig这样的SQL进行了比较。他给出了一个非常有说服力的例子,说明了像Pig这样的过程性语言(相对于声明性SQL)的有用性,以及它对数据流设计人员的实用性。

Hive的设计是为了吸引一个熟悉SQL的社区。它的哲学是我们不需要另一种脚本语言。Hive支持用户选择语言的map和reduce转换脚本(可以嵌入到SQL子句中)。它在Facebook上被熟悉SQL的分析人员以及使用Python编程的数据挖掘人员广泛使用。在Pig中SQL兼容性的努力已经被放弃了,所以这两个项目之间的区别是非常明显的。

支持SQL语法也意味着它可以与现有的BI工具(如Microstrategy)集成。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 through的核心用例之一 它的大部分历史。它具有支持类型的正确构造 分析人员想要使用的查询和工具。它已经在里面了

.工具和现场用户均可使用 Hadoop子项目Hive提供了一个SQL接口和关系型接口 Hadoop模型。Hive团队已经开始与BI集成

. tools通过ODBC等接口
  1. 猪拉丁是数据流风格,更适合软件工程师。而sql更适合分析的人谁是习惯sql。对于复杂的任务,hive需要手动创建临时表来存储中间数据,而pig则不需要。

  2. Pig-latin适用于复杂的数据结构(如小图)。在pig中有一个数据结构叫做DataBag,它是一个元组的集合。有时你需要计算涉及多个元组的度量(元组之间有一个隐藏的链接,在这种情况下我称之为图)。在这种情况下,很容易编写一个UDF来计算涉及多个元组的度量。当然,在蜂房中也可以这样做,但不像在猪中那样方便。

  3. 在我看来,在pig中编写UDF要比在Hive中容易得多。

  4. Pig没有元数据支持(或者它是可选的,将来它可能集成hcatalog)。Hive将表的元数据存储在数据库中。

  5. 您可以在本地环境中调试pig脚本,但hive很难做到这一点。原因是第3点。您需要在本地环境中设置蜂巢元数据,非常耗时。

在这个链接中阅读PIG和HIVE的区别。

http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features

给出了所有的方面。如果你不知道该选择哪个,那么你必须看看那个网页。

我找到了下面有用的链接来探索如何以及何时使用HIVE和PIG。

http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/

从链接: http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-suitable-for-Hive吗?< / p >

Hive不是一个完整的数据库。Hadoop和HDFS的设计约束和局限性限制了Hive的功能。

Hive最适合数据仓库应用,其中

1)分析相对静态的数据,

2)不需要快速响应时间,并且

3)当数据变化不迅速时。

Hive没有提供OLTP(在线事务处理)所需的关键特性。它更接近于OLAP工具,在线分析处理。 因此,Hive最适合于数据仓库应用程序,其中维护和挖掘大型数据集以获得见解、报告等

简单来说,Pig是一个高级平台,用于创建与Hadoop一起使用的MapReduce程序,使用Pig脚本我们将把大量数据处理成所需的格式。

一旦得到处理后的数据,这些处理后的数据就会保存在HDFS中,以便后续处理以获得所需的结果。

在存储的处理数据之上,我们将应用HIVE SQL命令来获得所需的结果,在内部这个HIVE SQL命令运行MAP Reduce程序。

Pig允许在管道中的任何位置加载数据和用户代码。如果数据是流数据,例如来自卫星或仪器的数据,这一点可能特别重要。

Hive是基于RDBMS的,它需要首先导入(或加载)数据,然后才能对其进行处理。因此,如果你在流数据上使用Hive,你将不得不继续填充桶(或文件),并在每个填满桶上使用Hive,同时使用其他桶来继续存储新到达的数据。

Pig也使用惰性求值。它使编程变得更加容易,人们可以用它来以不同的方式分析数据,比在像Hive这样的SQL类语言中更自由。因此,如果你真的想分析一些你拥有的非结构化数据中的矩阵或模式,并想对它们进行有趣的计算,使用Pig你可以走得很远,而使用Hive,你需要其他东西来处理结果。

Pig在数据导入方面更快,但在实际执行方面比像Hive这样的RDBMS友好语言要慢。

Pig非常适合并行化,因此它可能在数据集庞大的系统中具有优势,即在您更关心结果吞吐量而不是延迟(获得任何特定结果数据的时间)的系统中。

当我们使用Hadoop时,这意味着我们正在尝试处理数据处理的最终目标是从中生成内容/报告。的大量数据

所以它内部由两个主要活动组成:

1)加载数据处理

2)生成内容并用于报告等。

加载/数据处理->猪将是有帮助的。

这有助于ETL(我们可以使用pig脚本执行ETL操作)。

一旦处理了结果,我们可以使用hive根据处理的结果生成报告。

蜂巢:它建立在hdfs之上,用于仓库处理。

我们可以很容易地使用hive从pig生成的经过处理的内容生成adhoc报告。

简而言之,要对两者进行一个非常高水平的概述:

1) Pig是hadoop上的关系代数

2) Hive是一个SQL over hadoop(比Pig高一级)

猪什么都吃!这意味着它可以使用非结构化数据。

Hive需要一个模式。

有什么是HIVE可以做到的,而PIG做不到的?

分区可以使用HIVE完成,但不能在PIG中完成,这是一种绕过输出的方式。

什么是PIG可以做的,而在HIVE中是不可能的?

位置引用-即使你没有字段名,我们也可以使用像$0这样的位置来引用第一个字段,$1用于第二个字段,等等。

另一个基本区别是,PIG不需要一个模式来写值,但HIVE需要一个模式。

您可以使用JDBC和其他方法从任何外部应用程序连接到HIVE,但不能使用PIG。

注意:两者都运行在HDFS (hadoop分布式文件系统)上,语句被转换为Map Reduce程序。

看看“dezyre”文章中的猪对蜂巢比较

蜂巢在以下方面优于:分区,服务器,Web界面和放大器;JDBC / ODBC支持。

一些差异:

  1. Hive最适合结构化数据 &PIG最适合半结构化数据

  2. Hive用于上报 &PIG for programming

  3. Hive用作声明性SQL &PIG as a 过程性语言

  4. Hive支持分区 &PIG

  5. Hive可以启动一个可选的thrift based server &< >强猪< / >强不能

  6. Hive预先定义表(schema) +在数据库中存储模式信息&PIG没有专用的数据库元数据

  7. Hive不支持Avro,但PIG支持。编辑:Hive支持Avro,指定serde为org.apache.hadoop.hive.serde2.avro

  8. Pig还支持额外的COGROUP特性,用于执行外部连接,但hive不支持。但两者都Hive &PIG can join, order &< / em >动态排序。

一般来说,Pig对于ETL类型的工作负载很有用。例如,您每天需要对数据进行的一组转换。

当你需要运行特别的查询或只是想要探索数据时,Hive就会发挥作用。它有时可以作为可视化层(Tableau/Qlikview)的接口。

两者都是必不可少的,但目的不同。

〇蜂巢Vs猪

Hive是一个SQL接口,允许SQL精明的用户或其他工具,如Tableu/Microstrategy/任何其他工具或语言,有SQL接口。

PIG更像是一个ETL管道,有一步一步的命令,比如声明变量、循环、迭代、条件语句等。

当我想编写复杂的分步逻辑时,我更喜欢编写Pig脚本而不是hive QL。当我很舒服地写一个sql拉数据我想我使用Hive。对于hive,你需要在查询之前定义表(就像你在RDBMS中做的那样)

两者的目的不同,但在引子下,两者都做相同的,转换为映射减少程序。此外,Apache开源社区正在为这两个项目添加越来越多的特性