Почему задача Fetch в Hive работает быстрее, чем задача Map-only?

Можно включить задачу Fetch в Hive для простого запроса вместо Map или MapReduce с помощью параметра hive hive.fetch.task.conversion.

Пожалуйста, объясните, почему задача Fetch выполняется намного быстрее, чем Map, особенно при выполнении простой работы (например, select * from table limit 10;)? Какая задача, относящаяся только к карте, дополнительно выполняется в этом случае? В моем случае разница в производительности больше, чем в 20 раз. Обе задачи должны читать данные таблицы, не так ли?


person leftjoin    schedule 06.10.2016    source источник


Ответы (1)


FetchTask напрямую извлекает данные, тогда как Mapreduce вызывает задание уменьшения карты.

<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 - 1 ГБ (1073741824). Это указывает на то, что, если размер таблицы больше 1 ГБ, используйте Mapreduce вместо задачи Fetch.

подробнее

person Karan Adep    schedule 07.10.2016