настроить Hadoop для использования другого процесса Reducer для каждого ключа?

В связи с моим вопросом у меня есть процесс потоковой передачи, написанный на Python.

Я заметил, что каждый Reducer получает все значения, связанные с несколькими ключами, через sys.stdin.

Я бы предпочел, чтобы sys.stdin имел только значения, связанные с одним ключом. Возможно ли это с помощью Hadoop? Я полагаю, что другой процесс для каждого ключа был бы идеальным, но не могу найти конфигурацию, обеспечивающую такое поведение.

Может ли кто-нибудь помочь мне с информацией или кодом, который может помочь мне в этом?


person Shane    schedule 08.04.2013    source источник
comment
Почему вы хотите ограничить каждый редуктор одним ключом?   -  person highlycaffeinated    schedule 09.04.2013


Ответы (2)


Да, если вы знаете общее количество ключей, которые будут генерироваться картографами. вы можете установить его как job.setNUmReduceTasks(int n)

Кроме того, общее количество редукторов, которые будут работать параллельно, может быть определено в mapred-site.xml как

mapred.tasktracker.reduce.tasks.maximum

Это ускорит процесс сокращения. Однако каждый редюсер работает как задача jvm. Таким образом, ваша конфигурация должна быть в состоянии обрабатывать количество jvms, которые будут созданы.

person Sourav Gulati    schedule 09.04.2013

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

person highlycaffeinated    schedule 08.04.2013