使用where子句运行配置单元查询时未启动mapreduce作业

wvmv3b1j  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(279)

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

ocebsuys

ocebsuys1#

这是由于属性“hive.fetch.task.conversion”导致的。默认值设置为“more”(hive2.1.0),并导致hive通过尽可能地启动单个fetch任务而不是map reduce作业来尝试直接获取数据。
但是,如果您有一个巨大的表(比如500gb+),这种行为可能并不理想,因为它会导致启动一个线程,而不是像map reduce作业那样启动多个线程。您可以在hive-site.xml中将此属性设置为“minimal”或“none”,以绕过该行为。

q3qa4bjr

q3qa4bjr2#

我引用的是hive文档
配置单元.fetch.task.conversion
一些select查询可以转换为单个fetch任务,从而最小化延迟。目前,查询应该是单源的,没有任何子查询,也不应该有任何聚合或distincts(这会导致rs–reducesinkoperator,需要mapreduce任务)、侧视图和联接。
任何类型的聚合(如max、min或count)都需要mapreduce作业。所以这取决于你的数据集。

select * from tablename;

它只从hdfs中的文件中读取原始数据,因此在没有mapreduce的情况下速度要快得多,而且不需要mr。

相关问题