我在Hadoop 2.6.0上使用apache-hive-1.2.2。当我使用where子句运行配置单元查询时,它立即给出结果而不启动任何MapReduce作业。我不确定发生了什么。表有超过10万条记录。
答案 0 :(得分:0)
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”以绕过该行为。