Hadoop的Hive/Pig、HDFS和MapReduce的关系
Hadoop's Hive/Pig, HDFS and MapReduce relationship
我对Apache Hive is that its a SQL-like tooling layer for querying Hadoop clusters. My understanding of Apache Pig的理解是它是一种用于查询Hadoop集群的过程语言。因此,如果我的理解是正确的,Hive 和 Pig 似乎 是解决同一问题的两种不同方法。
然而,我的问题是,我不明白他们首先要解决的问题!
假设我们有一个将数据馈送到 HDFS 的数据库(关系型、NoSQL,无关紧要),以便特定的 MapReduce 作业可以 运行 针对该输入数据:
我不知道 Hive/Pig 查询的是哪个系统!他们在查询数据库吗?他们是否查询存储在 HDFS 上 DataNode 中的原始输入数据?他们 运行 是临时的、即时的 MR 作业并报告他们的 results/outputs 吗?
这些查询工具、存储在HDFS上的MR作业输入数据和MR作业本身是什么关系?
我认为您无法使用 Hive/Pig 查询任何数据而不实际添加它们。所以首先你需要添加数据。这些数据可以来自任何地方,您只需提供要选择的数据的路径或直接添加到它们。数据就位后,查询仅从这些表中获取数据。
在下面,他们使用 map reduce 作为执行该过程的工具。如果你只是有数据在某处并需要分析,你可以直接去 map redue 并定义你自己的逻辑。 Hive 主要在 SQL 前面。因此,您可以获得类似于 SQL 的查询功能,而在后端,map reduce 会完成这项工作。希望此信息对您有所帮助
Apache Pig 和 Apache Hive 从 HDFS 加载数据,除非您 运行 在本地加载数据,在这种情况下,它将在本地加载。它如何从数据库中获取数据?它不是。您需要其他框架将传统数据库中的数据导出到HDFS,例如Sqoop。
一旦您的 HDFS 中有了数据,您就可以开始使用 Pig 和 Hive。他们从不查询数据库。例如,在 Apache Pig 中,您可以使用 Pig 加载程序加载数据:
A = LOAD 'path/in/your/HDFS' USING PigStorage('\t');
至于Hive,你需要创建一个table,然后将数据加载到table:
LOAD DATA INPATH 'path/in/your/HDFS/your.csv' INTO TABLE t1;
同样,数据必须在 HDFS 中。
至于它是如何工作的,这取决于。传统上它一直与 MapReduce 执行引擎一起工作。 Hive 和 Pig 都会解析您在 PigLatin 或 HiveQL 中编写的语句,并将其转换为由一定数量的 MapReduce 作业组成的执行计划,具体取决于计划。但是,现在它也可以将其转化为 Tez,一种新的执行引擎,可能太新而无法正常工作。
为什么需要 Pig 或 Hive?好吧,您真的 不需要 这些框架。他们可以做的一切,您也可以编写自己的 MapReduce 或 Tez 作业来完成。然而,例如在 MapReduce 中编写一个 JOIN
操作可能需要成百上千行代码(真的),而在 Pig 或 Hive 中它只是一行代码。
我不同意 Pig 和 Hive 解决同样的问题,Hive 用于查询存储在 hdfs 上作为外部或内部表的数据,Pig 用于管理存储在有向无环图中的 hdfs 上的数据流,这是他们的主要目标,我们不关心其他用途,在这里我想区分一下:
- 查询数据(Hive 的主要目的),这是获取有关您的数据的一些问题的答案,例如:今年有多少不同的用户访问我的网站。
- 管理数据流(Pig 的主要目的)是通过转换使您的数据从初始状态到最终具有不同的状态,例如:位置 A 中的数据由条件 c 过滤并与数据连接在位置 B 存储在位置 C.
Smeeb、Pig、Hive 做同样的事情,我的意思是处理来自文件或任何格式的数据。
在这里,如果你想处理 RDMS 中存在的数据,首先在 Sqoop(SQL+HADOOP).
的帮助下将该数据传输到 HDFS
Hive 使用像 SQL 这样的 HQL 来处理,Pig 在 piglatin 的帮助下使用 kind flow。
Hive 以 tables 格式存储所有输入数据,因此,在将数据加载到 Hive 之前,首先要创建一个 hive table,该结构(元数据)将存储在任何 RDMS(Mysql)中。然后加载 LOAD DATA INPATH 'path/in/your/HDFS/your.csv' INTO TABLE t1;
我对Apache Hive is that its a SQL-like tooling layer for querying Hadoop clusters. My understanding of Apache Pig的理解是它是一种用于查询Hadoop集群的过程语言。因此,如果我的理解是正确的,Hive 和 Pig 似乎 是解决同一问题的两种不同方法。
然而,我的问题是,我不明白他们首先要解决的问题!
假设我们有一个将数据馈送到 HDFS 的数据库(关系型、NoSQL,无关紧要),以便特定的 MapReduce 作业可以 运行 针对该输入数据:
我不知道 Hive/Pig 查询的是哪个系统!他们在查询数据库吗?他们是否查询存储在 HDFS 上 DataNode 中的原始输入数据?他们 运行 是临时的、即时的 MR 作业并报告他们的 results/outputs 吗?
这些查询工具、存储在HDFS上的MR作业输入数据和MR作业本身是什么关系?
我认为您无法使用 Hive/Pig 查询任何数据而不实际添加它们。所以首先你需要添加数据。这些数据可以来自任何地方,您只需提供要选择的数据的路径或直接添加到它们。数据就位后,查询仅从这些表中获取数据。
在下面,他们使用 map reduce 作为执行该过程的工具。如果你只是有数据在某处并需要分析,你可以直接去 map redue 并定义你自己的逻辑。 Hive 主要在 SQL 前面。因此,您可以获得类似于 SQL 的查询功能,而在后端,map reduce 会完成这项工作。希望此信息对您有所帮助
Apache Pig 和 Apache Hive 从 HDFS 加载数据,除非您 运行 在本地加载数据,在这种情况下,它将在本地加载。它如何从数据库中获取数据?它不是。您需要其他框架将传统数据库中的数据导出到HDFS,例如Sqoop。
一旦您的 HDFS 中有了数据,您就可以开始使用 Pig 和 Hive。他们从不查询数据库。例如,在 Apache Pig 中,您可以使用 Pig 加载程序加载数据:
A = LOAD 'path/in/your/HDFS' USING PigStorage('\t');
至于Hive,你需要创建一个table,然后将数据加载到table:
LOAD DATA INPATH 'path/in/your/HDFS/your.csv' INTO TABLE t1;
同样,数据必须在 HDFS 中。
至于它是如何工作的,这取决于。传统上它一直与 MapReduce 执行引擎一起工作。 Hive 和 Pig 都会解析您在 PigLatin 或 HiveQL 中编写的语句,并将其转换为由一定数量的 MapReduce 作业组成的执行计划,具体取决于计划。但是,现在它也可以将其转化为 Tez,一种新的执行引擎,可能太新而无法正常工作。
为什么需要 Pig 或 Hive?好吧,您真的 不需要 这些框架。他们可以做的一切,您也可以编写自己的 MapReduce 或 Tez 作业来完成。然而,例如在 MapReduce 中编写一个 JOIN
操作可能需要成百上千行代码(真的),而在 Pig 或 Hive 中它只是一行代码。
我不同意 Pig 和 Hive 解决同样的问题,Hive 用于查询存储在 hdfs 上作为外部或内部表的数据,Pig 用于管理存储在有向无环图中的 hdfs 上的数据流,这是他们的主要目标,我们不关心其他用途,在这里我想区分一下:
- 查询数据(Hive 的主要目的),这是获取有关您的数据的一些问题的答案,例如:今年有多少不同的用户访问我的网站。
- 管理数据流(Pig 的主要目的)是通过转换使您的数据从初始状态到最终具有不同的状态,例如:位置 A 中的数据由条件 c 过滤并与数据连接在位置 B 存储在位置 C.
Smeeb、Pig、Hive 做同样的事情,我的意思是处理来自文件或任何格式的数据。 在这里,如果你想处理 RDMS 中存在的数据,首先在 Sqoop(SQL+HADOOP).
的帮助下将该数据传输到 HDFSHive 使用像 SQL 这样的 HQL 来处理,Pig 在 piglatin 的帮助下使用 kind flow。 Hive 以 tables 格式存储所有输入数据,因此,在将数据加载到 Hive 之前,首先要创建一个 hive table,该结构(元数据)将存储在任何 RDMS(Mysql)中。然后加载 LOAD DATA INPATH 'path/in/your/HDFS/your.csv' INTO TABLE t1;