Улей не может вручную установить количество редукторов - PullRequest
24 голосов
/ 06 января 2012

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

select count(distinct id) as total from mytable;

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

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

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

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

Ответы [ 4 ]

42 голосов
/ 07 января 2012

написание запроса в кусте так:

 SELECT COUNT(DISTINCT id) ....

всегда приведет к использованию только одного редуктора.Вы должны:

  1. использовать эту команду для установки желаемого количества редукторов:

    set mapred.reduce.tasks = 50

  2. переписать запрос следующим образом:

SELECT COUNT (*) FROM (SELECT DISTINCT id FROM ...) t;

Это приведет кв 2 карты + сокращение рабочих мест вместо одного, но прирост производительности будет значительным.

10 голосов
/ 18 марта 2014

Количество редукторов зависит также от размера входного файла

По умолчанию это 1 ГБ (1000000000 байт). Вы можете изменить это, установив свойство hive.exec.reducers.bytes.per.reducer:

  1. либо путем изменения hive-site.xml

    <property>
       <name>hive.exec.reducers.bytes.per.reducer</name>
       <value>1000000</value>
    </property>
    
  2. или используя набор

    $ hive -e "set hive.exec.reducers.bytes.per.reducer=1000000"

1 голос
/ 06 января 2012

Вы можете установить количество редукторов, порождаемых на узел, в файле конфигурации conf/mapred-site.xml. Смотрите здесь: http://hadoop.apache.org/common/docs/r0.20.0/cluster_setup.html.

В частности, вам нужно установить это свойство:

mapred.tasktracker.reduce.tasks.maximum
0 голосов
/ 13 марта 2018

Mapper полностью зависит от номера файла, т.е. размера файла, который мы можем назвать как входные разбиения. Разделение - это логическое разделение данных. Пример: размер моего файла составляет 150 МБ, а блок HDFS по умолчанию - 128 МБ. Это создаст два разбитых средства на два блока. Два Mapper будут назначены для этой работы.

Imp Примечание: Предположим, я указал размер сплита 50 МБ, тогда он запустит 3 Mapper, поскольку он полностью зависит от количества сплитов.

Imp Примечание: , если вы ожидаете 10 ТБ входных данных и размер блока 128 МБ , вы получите 82 000 карт , если Configuration.set (MRJobConfig.NUM_MAPS, int) (который предоставляет только подсказку для структуры) используется для его установки еще выше.

Примечание: Если мы не указали размер разделения, он будет принимать размер блока hdfs по умолчанию в качестве размера разделения.

Редуктор имеет 3 основных фазы: перемешать, отсортировать и уменьшить .

Команда:

1] Установить задачу карты: -D mapred.map.tasks = 4
2] Установить задачу уменьшения: -D mapred.reduce.tasks = 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...