2013-06-27 4 views
0

При разработке локально на моей отдельной машине, я считаю, что число редукторов по умолчанию равно 6. В конкретном шаге MR я фактически делю данные на n разделов, где n может быть больше 6. Из что я наблюдал, похоже, что только 6 из этих разделов фактически обрабатываются, потому что я вижу только выход из 6 конкретных разделов. Несколько вопросов:Создание большего количества разделов, чем редукторов

(a) Нужно ли устанавливать количество редукторов больше, чем количество разделов? Если да, могу ли я сделать это до/во время/после запуска Mapper?

(b) Почему другие разделы не находятся в очереди? Есть ли способ подождать, пока редуктор завершит обработку одного раздела, прежде чем работать с другим разделом, чтобы все разделы могли обрабатываться независимо от того, меньше ли количество редукторов, чем количество разделов?

+0

откровение здесь было то, что несколько разделов может быть хешируется же редуктора. – syker

ответ

1

(a) Нет. Вы можете иметь любое количество редукторов, исходя из ваших потребностей. Разделение просто решает, какой набор пар ключ/значение пойдет на какой редуктор. Он не решает, сколько редукторов будет создано. Но, если есть ситуация, в которой вы хотите установить количество восстановителей согласно вашему требованию, вы можете сделать это через вакансию:

job.setNumReduceTasks(2); 

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

Убедитесь, что ваша логика разделов правильная.

P.S. : Почему вы считаете, что количество редукторов по умолчанию - 6?

+0

Я считаю, что число редукторов по умолчанию равно 6, потому что numReduceTasks - 6. – syker

+0

numReduceTasks - это то, что вы указали в своей работе. Значение по умолчанию означает что-то, что используется каркасом, если пользователь не указал ничего. – Tariq

1

Вы также можете попросить несколько редукторов, когда вы отправляете задание на хаос. $ Hadoop баночка myjarfile mymainclass -Dmapreduce.job.reduces = п myinput myoutputdir

Дополнительные параметры и некоторые подробности см: Hadoop Number of Reducers Configuration Options Priority