Hive не может вручную установить количество редукторов
У меня есть следующий запрос куста:
select count(distinct id) as total from mytable;
который автоматически появляется:
1408 Mappers
1 Редуктор
Мне нужно вручную установить количество редукторов, и я попробовал следующее:
set mapred.reduce.tasks=50
set hive.exec.reducers.max=50
но ни один из этих настроек, по-видимому, не соблюдается. Запрос выполняется навсегда для запуска. Есть ли способ вручную установить редукторы или, возможно, переписать запрос, чтобы он мог привести к большему количеству редукторов? Спасибо!
Ответы
Ответ 1
запись запроса в hive следующим образом:
SELECT COUNT(DISTINCT id) ....
всегда будет использоваться только один редуктор.
Вы должны:
-
используйте эту команду для установки желаемого количества редукторов:
set mapred.reduce.tasks = 50
-
перепишите запрос следующим образом:
SELECT COUNT (*) FROM (SELECT DISTINCT id FROM...) t;
Это приведет к тому, что 2 карты + уменьшат задания вместо одного, но усиление производительности будет существенным.
Ответ 2
Количество редукторов зависит также от размера входного файла
По умолчанию это 1 ГБ (1000000000 байт). Вы можете изменить это, установив свойство hive.exec.reducers.bytes.per.reducer:
-
либо путем изменения hive-site.xml
<property>
<name>hive.exec.reducers.bytes.per.reducer</name>
<value>1000000</value>
</property>
-
или с помощью набора
$ hive -e "set hive.exec.reducers.bytes.per.reducer=1000000"
Ответ 3
Вы можете установить количество редукторов, порожденных за node в конфигурационном файле conf/mapred-site.xml
. См. Здесь: http://hadoop.apache.org/common/docs/r0.20.0/cluster_setup.html.
В частности, вам необходимо установить это свойство:
mapred.tasktracker.reduce.tasks.maximum