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

Laz*_*zer 9 hadoop hive mapreduce

举个简单的例子,

select * from tablename;
Run Code Online (Sandbox Code Playgroud)

不要在地图缩小时使用

select count(*) from tablename;
Run Code Online (Sandbox Code Playgroud)

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

Don*_*ner 9

通常,任何类型的聚合(例如min/max/count)都需要MapReduce作业.这可能不会为你解释一切.

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


Par*_*rma 5

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

这也是Hive中的优化技术。hive.fetch.task.conversion属性可以(即FETCH任务)最小化映射减少延迟的延迟。

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

但是,如果我们使用tablename中的select colNames,则它需要一个map-reduce作业,因为它需要通过从加载的文件中进行解析来从每一行中提取“列”。