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

我明白——

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

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


当前回答

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

其他回答

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

1) Pig是hadoop上的关系代数

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

〇蜂巢Vs猪

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

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

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

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

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

Hive需要一个模式。

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

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

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

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

支持SQL语法也意味着它可以与现有的BI工具(如Microstrategy)集成。Hive有一个ODBC/JDBC驱动程序(这是一个正在进行的工作),应该可以在不久的将来实现这一点。它还开始添加对索引的支持,这应该允许支持在这种环境中常见的向下钻取查询。

最后——这与问题无关——Hive是一个执行分析查询的框架。虽然它的主要用途是查询平面文件,但它没有理由不能查询其他存储。目前,Hive可以用于查询存储在Hbase中的数据(它是一个键值存储,就像大多数RDBMS内部的键值存储一样),HadoopDB项目已经使用Hive来查询联邦RDBMS层。