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