使用where子句运行hive查询时,Mapreduce作业无法启动

时间:2017-09-28 14:07:56

标签: hive

我在Hadoop 2.6.0上使用apache-hive-1.2.2。当我使用where子句运行配置单元查询时,它立即给出结果而不启动任何MapReduce作业。我不确定发生了什么。表有超过10万条记录。

2 个答案:

答案 0 :(得分:0)

我是从Hive Documentation

引用的
  

hive.fetch.task.conversion

     

某些选择查询可以转换为单个FETCH任务,   最小化延迟。目前查询应该是单一来源的   有任何子查询,不应该有任何聚合或区别   (导致RS - ReduceSinkOperator,需要MapReduce任务),   侧视图和连接。

任何类型的聚合(如max或min或count)都需要MapReduce作业。所以这取决于你的数据集。

select * from tablename;

它只是从HDFS中的文件读取原始数据,因此没有MapReduce它会更快,并且它不需要MR。

答案 1 :(得分:0)

这归因于属性“ hive.fetch.task.conversion”。默认值设置为“ more”(Hive 2.1.0),并导致Hive尝试通过启动单个Fetch任务而不是Map Reduce作业来直接处理数据。

但是,如果您有一个巨大的表(例如500 GB +),此行为可能不是所希望的,因为它会导致启动一个线程,而不是像Map Reduce作业那样会启动多个线程。 您可以在hive-site.xml中将此属性设置为“ minimal”或“ none”以绕过该行为。