Подтвердить что ты не робот

Hive не может вручную установить количество редукторов

У меня есть следующий запрос куста:

select count(distinct id) as total from mytable;

который автоматически появляется:
1408 Mappers
1 Редуктор

Мне нужно вручную установить количество редукторов, и я попробовал следующее:

set mapred.reduce.tasks=50 
set hive.exec.reducers.max=50

но ни один из этих настроек, по-видимому, не соблюдается. Запрос выполняется навсегда для запуска. Есть ли способ вручную установить редукторы или, возможно, переписать запрос, чтобы он мог привести к большему количеству редукторов? Спасибо!

4b9b3361

Ответ 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