关于不调用底层 MapReduce 作业的 Hive 命令

regarding the Hive commands that do not invoke underlying MapReduce jobs

我的理解是Hive是一种类似SQL的语言,可以通过调用底层的MapReduce程序来执行数据库相关的任务。但是,我了解到某些 Hive 命令不会调用 MapReduce 作业。我很想知道这些命令是什么,以及为什么它们不需要调用 MapReduce 作业。

你说的对,Hive在后台使用MR作业来处理数据。 当你在 hive 中触发一个类似于 SQL 的查询时,它会在后台将其转换为各种 MR 作业并为你提供结果。

话虽如此,很少有查询不需要 MR 作业。 例如

SEKECT * 从 table 限制 10;

如果您在上面的查询中看到我们不需要任何数据处理。我们只需要从 table.

中读取几行

所以上面的配置单元查询不会触发 MR 作业

但是如果我们稍微修改一下上面的查询。

SELECT 计数 (*) 来自 table;

它将解雇 MR 工作。因为我们需要读取此查询的所有数据,MR 作业会为我们快速完成(并行处理)

由于 hive table 以文件的形式存储在 HDFS 中,hive 通过避免 mapreduce 调用和 'Select *' 、 'Select * limit' 等操作节省了处理时间和精力直接从 hdfs 中获取整个文件或文件的一部分并显示给用户。

无论如何,也可以通过修改 hive-site.xml hive.fetch.task.conversion 属性 为所有操作调用 map-reduce 程序来更改此默认行为。