繁体   English   中英

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

[英]How does Hive decide when to use map reduce and when not to?

举个简单的例子,

select * from tablename;

不要在地图缩小时使用

select count(*) from tablename;

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

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

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

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

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

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

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

select * from tablename;

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM