Прежде чем этот вопрос будет помечен как дубликат, прочтите его.
Этот вопрос задавался много раз без четкого ответа. Допустим, моя задача — вычислить вероятность unigram
для каждого слова в миллионах файлов. Я могу выдавать счетчики слов из картографов, а редукторы могут агрегировать счетчики для каждого слова. Однако для вычисления вероятностей нам нужно общее количество слов. Один из способов сделать это — отправить количество слов от каждого преобразователя каждому редюсеру со специальным ключом и отсортировать ключи таким образом, чтобы эти подсчеты поступали раньше, чем отдельные подсчеты. Затем редуктор может просто сложить количество, полученное от картографов, чтобы получить общее количество слов.
Но как заставить мапперы отправлять счетчики всем редукторам?
Я могу узнать общее количество редукторов из свойств задания, скажем, n
. Нет ли способа вызывать Context.write()
n
количество раз из каждого маппера и указывать номер раздела от 0
до n-1
по очереди, чтобы данные доходили до всех редукторов?
Hadoop
, здесь: mail-archives.apache.org/mod_mbox/hadoop-mapreduce-user/ - person abhinavkulkarni   schedule 11.10.2013