Hive中的Fetch task为什么比Map-only task快?



可以使用Hive的hive.fetch.task.conversion参数在Hive中启用Fetch任务来进行简单查询,而不是使用Map或MapReduce。

请解释为什么Fetch任务的运行速度比Map快得多,特别是在做一些简单的工作时(例如select * from table limit 10;)?在这种情况下,只有地图的任务还在做什么?在我的例子中,性能差异要快20倍以上。两个任务都应该读取表数据,不是吗?

FetchTask直接获取数据,而Mapreduce将调用map reduce作业

<property>
  <name>hive.fetch.task.conversion</name>
  <value>minimal</value>
  <description>
    Some select queries can be converted to single FETCH task 
    minimizing latency.Currently the query should be single 
    sourced not having any subquery and should not have
    any aggregations or distincts (which incurrs RS), 
    lateral views and joins.
    1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
    2. more    : SELECT, FILTER, LIMIT only (+TABLESAMPLE, virtual columns)
  </description>
</property>

还有另一个参数hive.fetch.task.conversion.threshold,默认0.10-0.13为-1,>0.14为1G(1073741824)这表明,如果表大小大于1G,使用Mapreduce而不是Fetch任务

更详细

相关内容

  • 没有找到相关文章

最新更新