![](/img/trans.png)
[英]How to decide when to use a Map-Side Join or Reduce-Side while writing an MR code in java?
[英]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个值- none
, minimal
(默认)和more
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.