Как распределяются пары ключ/значение в Hadoop при использовании нескольких редюсеров?

Предположим, у меня есть работа, в которой есть несколько картографов и более одной задачи сокращения. Тип ключа, который выводит сопоставитель, — WritableComparable. То есть, для примера подсчета слов, допустим, у меня есть строка:

"фу фу бар фу блетч квакс бар"

При использовании слов в качестве ключа всегда ли «foo» распространяется на одно и то же сокращение или возможно, что более одного редюсера получает «foo»?


person rabejens    schedule 28.10.2014    source источник


Ответы (3)


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

На самом деле это происходит так: на этапе разделения к ключам применяется хеш-функция, и, следовательно, они отправляются редьюсерам с использованием хэша. Поэтому все похожие ключи в конечном итоге попадут в один и тот же редьюсер.

person Amar    schedule 29.10.2014

MapReduce всегда передает редюсеру пары ключ-значение, чтобы все значения, связанные с одним и тем же ключом, попадали в один и тот же редьюсер. Это делается на этапе partitioner во время MapReduce.

Поэтому все значения, связанные с foo, перейдут к одному и тому же редюсеру.

person Chaos    schedule 28.10.2014

Hadoop выполняет сортировку выходных данных всех задач отображения, а затем передает все выходные данные преобразователя с одним и тем же ключом в одну и ту же задачу редьюсера. Это называется «перемешивание». Таким образом, одна задача редуктора может обрабатывать все результаты сопоставления «foo», а другая — все результаты сопоставления «bar». Если "foo" или "bar" являются ключами, выдаваемыми картографом, то больше чем один редуктор никогда не получит "foo".

person nochum    schedule 29.10.2014