2015-09-17 2 views
0

Если я задал количество задач сокращения как-то вроде 100, и когда я запустил задание, предположим, что число задач сокращения превышает (по моему мнению, количество задач сокращения зависит от ключа -значение, которое мы получаем из сопоставления. Предположим, что я устанавливаю (1,abc) и (2,bcd) в качестве ключевого значения в mapper, число задач сокращения будет 2) Как MapReduce обрабатывает его ?.количество задач картографа и редуктора в MapReduce

ответ

1

согласно моему пониманию количества снижающих задач зависит от ключевого значения мы получаем от картографа

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

Например, если нам нужно 2 восстановителей для нашей работы, то мы должны установить его в классе водитель нашего MapReduce работы, как показано ниже: -

job.setNumReduceTasks(2); 

В Hadoop: The Definitive Guide книгу, Том Уайт заявляет, что - Установка количества редукторов - это своего рода искусство, а не наука.

Поэтому мы должны решить, сколько редукторов нам нужно для нашей работы. Для вашего примера, если у вас есть промежуточный ввод Mapper как (1, abc) и (2, bcd), и вы не указали количество редукторов в классе драйвера, то Mapreduce по умолчанию запускает только 1 редуктор, а обе пары значений ключа будет обрабатываться одним редуктором, и вы получите один выходной файл в указанном каталоге вывода.

0

Значение по умолчанию числа редуктора на MapReduce является независимо от числа (ключ, значение) пар.

Если вы установите число редуктора для работы MapReduce, то число редуктора не будет превышать, чем заданное значение, независимо от количества различных пар (ключ, значение).

После того, как задача Картопостроитель завершены вывод обрабатывается Partitioner путем деления данных в Reducers. По умолчанию разделитель для hadoop - HashPartitioner, который разбивает данные на основе хэш-значения ключей. Он имеет метод под названием getPartition. Он принимает key.hashCode() & Integer.MAX_VALUE и находит modulus, используя number of reduce tasks.

Таким образом, количество редукторов никогда не будет превышать то, что вы определили в классе Driver.