作为一个简单的例子,Hive如何决定何时使用地图缩小以及何时不使用地图缩小?
select * from tablename;
不地图减少踢,而
select count(*) from tablename;
DOES。用于决定何时使用map reduce(通过配置单元)的一般原则是什么?
作为一个简单的例子,Hive如何决定何时使用地图缩小以及何时不使用地图缩小?
select * from tablename;
不地图减少踢,而
select count(*) from tablename;
DOES。用于决定何时使用map reduce(通过配置单元)的一般原则是什么?
通常,任何类型的聚合(例如min/max/count)都需要MapReduce作业。这可能不会解释你的一切。
Hive以许多RDBMS的风格,有一个EXPLAIN
关键字,它将概述Hive查询如何转换为MapReduce作业。尝试对两个示例查询运行解释并查看它在后台尝试执行的操作。
select * from tablename;
只是读取HDFS文件中的原始数据,所以它没有MapReduce就快得多。
这是一种优化技术,hive.fetch.task.conversion
属性can(FETCH)任务可以最小化mapreduce开销的延迟。
在执行SELECT,LIMIT,FETCH查询时,此属性会跳过mapreduce并使用FETCH任务。
该属性可以有3个值 - none
,minimal
(默认值)和more
。
每当我们火象SELECT *查询从表名,蜂巢读取数据文件,并获取整个数据没有做任何的聚合(最小/最大/计数等)。它会调用FetchTask而不是mapreduce任务。
这也是Hive中的一项优化技术。 hive.fetch.task.conversion属性可以(即FETCH任务)最小化map-reduce开销的延迟。
这就好比我们正在阅读一个Hadoop文件:Hadoop的FS -cat名
但是,如果我们使用的tablename选择colNames,它需要一个地图,减少工作,因为它需要提取通过从加载的文件中解析每行的'列'。
但是对于一个大文件,它必须从所有节点并行读取。 Hive没有MR吗? – ernesto