Hive如何决定何时使用map reduce以及何时不使用?

时间:2011-09-19 04:27:22

标签: hadoop mapreduce hive

举个简单的例子,

select * from tablename;

不打开地图缩小,而

select count(*) from tablename;

DOES。用于决定何时使用map reduce(通过hive)的一般原则是什么?

4 个答案:

答案 0 :(得分:8)

通常,任何类型的聚合(例如最小/最大/计数)都需要MapReduce作业。这可能不会为你解释一切。

Hive,以许多RDBMS的风格,有一个EXPLAIN关键字,它将概述您的Hive查询如何转换为MapReduce作业。尝试在两个示例查询上运行解释,看看它在幕后尝试做什么。

答案 1 :(得分:4)

每当我们触发 select * from tablename 之类的查询时,Hive会读取数据文件并获取整个数据而不进行任何聚合(最小/最大/计数等)。 )。它会调用 FetchTask 而不是 mapreduce 任务。

这也是Hive中的优化技术。 hive.fetch.task.conversion 属性可以(即FETCH任务)最小化map-reduce开销的延迟。

这就像我们正在阅读一个hadoop文件: hadoop fs -cat filename

但是,如果我们使用从tablename 中选择colNames,则需要map-reduce作业,因为它需要提取'列'从每行开始,从它加载的文件中解析它。

答案 2 :(得分:1)

  

从tablename中选择*;

只需从HDFS中的文件中读取原始数据,因此没有MapReduce就会快得多。

答案 3 :(得分:-1)

这是一种优化技术,hive.fetch.task.conversion属性可以(FETCH)任务最小化mapreduce开销的延迟。

在执行SELECT,LIMIT,FETCH查询时,此属性会跳过mapreduce并使用FETCH任务。

此属性可以有3个值 - noneminimal(默认值)和more