Apache Hive的理解是它的一个类似SQL的工具层,用于查询Hadoop集群。我对Apache Pig的理解是它用于查询Hadoop集群的过程语言。所以,如果我的理解是正确的,Hive和Pig 似乎就像解决同一问题的两种不同方式。
然而,我的问题是,我不了解他们首先解决的问题!
假设我们有一个数据库(关系,NoSQL,无关紧要)将数据提供给HDFS,以便可以针对该输入数据运行特定的MapReduce作业:
我对Hive / Pig正在查询的系统感到困惑!他们在查询数据库吗?他们是否在HDFS上查询存储在DataNode中的原始输入数据?他们是在运行一些临时的,即时的MR工作并报告他们的结果/输出吗?
这些查询工具,存储在HDFS上的MR作业输入数据和MR作业本身之间有什么关系?
答案 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,这是他们的主要目标我们不关心其他用途,在这里我想区分:
答案 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;