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

时间:2015-03-30 02:22:42

标签: hadoop mapreduce hive

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

2 个答案:

答案 0 :(得分:0)

你是对的,Hive在后台使用MR作业来处理数据。 你可以在hive中激活类似SQL的查询,它会在后台将它转换为各种MR作业并为你提供结果。

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

SEKECT * FROM table LIMIT 10;

如果您在上面的查询中看到我们不需要任何数据处理。我们只需要从表中读取几行。

因此上述配置单元查询不会触发MR作业

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

SELECT COUNT(*)FROM table;

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

答案 1 :(得分:0)

由于hive表以HDFS中的文件形式存储,因此hive会保存处理时间和精力,用于'选择*' ,'选择*限制'通过避免mapreduce调用并直接从hdfs获取整个文件或文件的一部分并显示给用户。

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

相关问题