可以使用 hivehive.fetch.task.conversion
参数在 Hive 中启用 Fetch 任务以进行简单查询,而不是 Map 或 MapReduce。
请解释为什么 Fetch 任务的运行速度比 Map 快得多,尤其是在做一些简单的工作时(例如select * from table limit 10;
)?在这种情况下,还有哪些仅地图任务正在执行?就我而言,性能差异要快 20 倍以上。这两个任务都应该读取表数据,不是吗?
可以使用 hivehive.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 任务