количество редукторов для 1 задачи в MapReduce - PullRequest
8 голосов
/ 02 июня 2011

В типичной настройке MapReduce (например, Hadoop), сколько редуктора используется для 1 задачи, например, для подсчета слов?Мое понимание того, что MapReduce от Google означает, что задействован только 1 редуктор.Это правильно?

Например, счетчик слов разделит входные данные на N блоков, и N Map будет запущена, создав список (word, #). Мой вопрос заключается в том, что после завершения фазы карты будет ли работать только ОДИН экземпляр редуктора для вычисления результата?или будут параллельно работать редукторы?

Ответы [ 5 ]

13 голосов
/ 02 июня 2011

Простой ответ заключается в том, что число редукторов не обязательно должно быть равно 1, и да, редукторы могут работать параллельно.Как я уже упоминал выше, это определяется или определяется пользователем.

Чтобы держать вещи в контексте, в этом случае я буду ссылаться на Hadoop, чтобы у вас было представление о том, как все работает.Если вы используете потоковый API в Hadoop (0.20.2), вам придется явно указать, сколько редукторов вы хотели бы запустить, поскольку по умолчанию будет запущена только 1 задача сокращения.Вы делаете это, передавая число редукторов в аргумент -D mapred.reduce.tasks=# of reducers.Java API попытается определить количество необходимых вам редукторов, но вы также можете явно установить это.В обоих случаях существует жесткое ограничение на число редукторов, которые вы можете запустить на узел, и это задано в вашем mapred-site.xml файле конфигурации с помощью mapred.tasktracker.reduce.tasks.maximum.

В более концептуальной заметке вы можете посмотретьв этом сообщении на вики-странице hadoop, в котором говорится о выборе количества карт и сокращении задач.

2 голосов
/ 02 июня 2011

В случае простого примера подсчета слов было бы целесообразно использовать только один редуктор.
Если вы хотите иметь в результате вычисления только одно число, вам нужно использовать один редуктор (2 или более редукторов дадут вам 2 или более выходных файлов).

Если этот редуктор занимает много времени, вы можете подумать о цепочке нескольких редукторов, где редукторы на следующем этапе суммируют результаты предыдущих редукторов.

1 голос
/ 07 декабря 2015

Значение по умолчанию равно 1. Если вы рассматриваете улей или свинью, то число редукторов зависит от запроса, например, группировка по сумме .....

В случае кода преобразования карты,это можно определить с помощью setNumReduceTasks для job / conf.

job.setNumReduceTasks(3);

В большинстве случаев это происходит при перезаписи getPartition(), т. е. при использовании настраиваемого разделителя

class customPartitioner extends Partitioner<Text,Text>{
    public int getPartition(Text key, Text value, int numReduceTasks){
    if(numReduceTasks==0)
        return 0;
    if(some logic)
        return 0;
    if(some logic)
        return 1;
    else
        return 2;
    }
}

Одна вещь, которую вы заметите, что число редукторов = номер файла детали в выводе.

Дайте мне знать, если у вас есть сомнения.

1 голос
/ 02 июня 2011

Это полностью зависит от ситуации.В некоторых случаях у вас нет никаких редукторов ... все может быть сделано на стороне карты.В других случаях вы не можете избежать использования одного редуктора, но обычно это происходит во 2-й или 3-й карте / работе по сокращению, которая объединяет более ранние результаты.Как правило, однако, вы хотите иметь много редукторов, иначе вы теряете мощь MapReduce!Например, при подсчете слов результатом ваших сопоставителей будут пары.Эти пары затем делятся на основе слова так, что каждый редуктор получит одинаковые слова и может дать вам окончательную сумму.Каждый редуктор затем выводит результат.Если бы вы захотели, вы могли бы затем снять другую работу M / R, которая взяла все эти файлы и объединила их - эта работа будет иметь только один редуктор.

0 голосов
/ 08 апреля 2015

Редукторы работают параллельно. Номер редуктора, который вы установили в своем задании при изменении файла конфигурации mapred-site.xml, или установив редуктор во время выполнения команды выполнения задания, или вы можете установить его в программе, при этом количество редукторов будет работать параллельно. Нет необходимости сохранять его равным 1. По умолчанию его значение равно 1.

...