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

我明白——

猪的语言猪的拉丁语是一种转变 来自(适合程序员的思维方式) SQL喜欢声明式的 编程和Hive的查询语言密切相关 类似于SQL。 Pig位于Hadoop之上 原则也可以凌驾于之上 德律阿得斯。我可能错了,但蜂巢错了 与Hadoop紧密耦合。 都是Pig Latin和Hive命令 编译映射和减少作业。

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


当前回答

从链接: 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最适合数据仓库应用程序,其中维护和挖掘大型数据集以获得见解、报告等。

其他回答

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

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

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

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

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

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

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

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

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

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

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

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

摘自Hadoop O'Reilly的书:

Pig:一种数据流语言 探索环境非常大 数据集。 Hive:分布式数据仓库

〇蜂巢Vs猪

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

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

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

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