2011-09-19 28 views

回答

6

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

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

1

select * from tablename;

只是读取HDFS文件中的原始数据,所以它没有MapReduce就快得多。

+1

但是对于一个大文件,它必须从所有节点并行读取。 Hive没有MR吗? – ernesto

-1

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

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

该属性可以有3个值 - none,minimal(默认值)和more

1

每当我们火象SELECT *查询从表名,蜂巢读取数据文件,并获取整个数据没有做任何的聚合(最小/最大/计数等)。它会调用FetchTask而不是mapreduce任务。

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

这就好比我们正在阅读一个Hadoop文件:Hadoop的FS -cat名

但是,如果我们使用的tablename选择colNames,它需要一个地图,减少工作,因为它需要提取通过从加载的文件中解析每行的'列'。

相关问题