Hadoop的Hive / Pig,HDFS和MapReduce关系

时间:2015-06-25 14:39:41

标签: java hadoop mapreduce hive apache-pig

Apache Hive理解是它的一个类似SQL的工具层,用于查询Hadoop集群。我对Apache Pig理解是它用于查询Hadoop集群的过程语言。所以,如果我的理解是正确的,Hive和Pig 似乎就像解决同一问题的两种不同方式。

然而,我的问题是,我不了解他们首先解决的问题!

假设我们有一个数据库(关系,NoSQL,无关紧要)将数据提供给HDFS,以便可以针对该输入数据运行特定的MapReduce作业:

enter image description here

我对Hive / Pig正在查询的系统感到困惑!他们在查询数据库吗?他们是否在HDFS上查询存储在DataNode中的原始输入数据?他们是在运行一些临时的,即时的MR工作并报告他们的结果/输出吗?

这些查询工具,存储在HDFS上的MR作业输入数据和MR作业本身之间有什么关系?

4 个答案:

答案 0 :(得分:4)

Apache Pig和Apache Hive从HDFS加载数据,除非您在本地运行它,在这种情况下它将在本地加载它。它如何从数据库中获取数据?它不是。您需要其他框架将传统数据库中的数据导出到HDFS中,例如Sqoop。

在HDFS中获得数据后,您就可以开始使用Pig和Hive了。他们从不查询数据库。例如,在Apache Pig中,您可以使用Pig loader:

加载数据
A = LOAD 'path/in/your/HDFS' USING PigStorage('\t');

对于Hive,您需要创建一个表,然后将数据加载到表中:

LOAD DATA INPATH 'path/in/your/HDFS/your.csv' INTO TABLE t1;

同样,数据必须在HDFS中。

至于它是如何工作的,取决于它。传统上它一直使用MapReduce执行引擎。 Hive和Pig都会解析您在PigLatin或HiveQL中编写的语句,并将其转换为由一定数量的MapReduce作业组成的执行计划,具体取决于计划。但是,现在它也可以将它转换为Tez,这是一个新的执行引擎,可能太新了,无法正常工作。

为什么需要猪或蜂巢?好吧,你真的不需要这些框架。他们可以做的一切,你也可以编写自己的MapReduce或Tez工作。但是,在MapReduce中编写例如JOIN操作可能需要数百或数千行代码(实际上),而Pig或Hive中只有一行代码。

答案 1 :(得分:2)

我不认为您可以使用Hive / Pig查询任何数据而无需实际添加它们。首先,您需要添加数据。这些数据可以来自任何地方,您只需提供数据路径即可选择或直接添加到数据中。数据到位后,查询仅从这些表中获取数据。

在下面,他们使用map reduce作为执行此过程的工具。如果您只是在某处并且需要分析,那么您可以直接转到redue并定义自己的逻辑。 Hive主要是在SQL前端。因此,您可以获得类似于SQL的查询功能,而在后端,map reduce可以完成工作。希望这些信息有帮助

答案 2 :(得分:0)

我不同意Pig和Hive解决同样的问题,Hive用于查询存储在hdfs上的数据作为外部或内部表,Pig用于管理存储在hdfs中的数据流中的Directed Acyclic Graph,这是他们的主要目标我们不关心其他用途,在这里我想区分:

  • 查询数据(Hive的主要目的),获取有关您数据的一些问题的答案,例如:今年有多少不同的用户访问我的网站每个mounth。
  • 管理数据流(Pig的主要目的)是通过转换使您的数据从初始状态变为最终处于不同的状态,例如:位置A中的数据通过标记过滤并与位置中的数据结合B存储在位置C。

答案 3 :(得分:0)

Smeeb,Pig,Hive做同样的事情,我指的是处理文件中的数据或者格式化的数据。 这里如果你想处理RDMS中存在的数据,首先借助Sqoop(SQL + HADOOP)将数据传送到HDFS。

Hive使用像SQL这样的HQL进行处理,Pig在Piglatin的帮助下使用了种类流。 Hive以表格格式存储所有输入数据,因此,首先在向Hive加载数据之前创建一个hive表,该结构(元数据)将存储在任何RDMS(Mysql)中。然后加载LOAD DATA INPATH'path / in / your / HDFS / your.csv'INTO TABLE t1;