2013-04-24 3 views
15

Несколько мест говорят, что по умолчанию # сокращения в задаче Hadoop равны 1. Вы можете использовать символ mapred.reduce.tasks, чтобы вручную установить количество редукторов.Как улей выбирает количество редукторов для работы?

Когда я запускаю работу Hive (на Amazon EMR, AMI 2.3.3), у нее есть некоторое количество редукторов больше одного. Глядя на настройки работы, что-то установило mapred.reduce.tasks, я полагаю, что Hive. Как он выбирает этот номер?

Примечание: здесь некоторые сообщения во время работы улой работы, которая должна быть подсказкой:

... 
Number of reduce tasks not specified. Estimated from input data size: 500 
In order to change the average load for a reducer (in bytes): 
    set hive.exec.reducers.bytes.per.reducer=<number> 
In order to limit the maximum number of reducers: 
    set hive.exec.reducers.max=<number> 
In order to set a constant number of reducers: 
    set mapred.reduce.tasks=<number> 
... 
+0

Хороший вопрос. В частности, когда куст выбирает «Количество задач сокращения, определяемых во время компиляции», и когда он выбирает «оценивать по размеру входных данных»? – ihadanny

+0

добавил, что в ответе ниже –

ответ

16

по умолчанию 1, может быть, для ванильного Hadoop установка. Улей переопределяет его.

В открытом исходном улье (и ЭМИ вероятно)

# reducers = (# bytes of input to mappers) 
      /(hive.exec.reducers.bytes.per.reducer) 

This post говорит по умолчанию hive.exec.reducers.bytes.per.reducer является 1G.

Вы можете ограничить количество редукторов, произведенных этой эвристикой, используя hive.exec.reducers.max.

Если вы точно знаете количество необходимых вам редукторов, вы можете установить mapred.reduce.tasks, и это переопределит все эвристики. (По умолчанию это значение равно -1, что указывает на то, что улей следует использовать его эвристику.)

В некоторых случаях - скажите «выберите счетчик (1) из T '-« Улей »установит количество редукторов на 1, независимо от размер входных данных. Они называются «полными агрегатами», и если единственное, что делает запрос, - это полные агрегаты, то компилятор знает, что данные от карт будут уменьшены до тривиальной суммы, и нет смысла работать с несколькими редукторами.

+0

Несмотря на то, что полные агрегаты уменьшают количество выходных данных от значимого значения, большее количество редукторов может помочь уменьшить время работы. Мы столкнулись с проблемой с Hive, который имеет 1100+ карт и только с одним редуктором. Для завершения сортировки требуется несколько часов. – dedunumax

+0

Ссылка не действительна. Хорошо писать ссылки Apache. –

Смежные вопросы