Вопрос по – Hadoop - Как редуктор получает данные?

4

Я понимаю, что маппер производит 1 раздел на редуктор. Как редуктор знает, какой раздел копировать? Допустим, есть 2 узла, выполняющих маппер для программы подсчета слов, и настроены 2 редуктора. Если каждый узел карты создает 2 раздела с возможностью разделов в обоих узлах, содержащих одно и то же слово в качестве ключа, как корректно будет работать редуктор?

Например:

Если узел 1 создает раздел 1 и раздел 2, а раздел 1 содержит ключ с именем «WHO».

Если узел 2 создает раздел 3 и раздел 4, а раздел 3 содержит ключ с именем «WHO».

Если раздел 1 и раздел 4 перешли к редуктору 1 (и остаются к редуктору 2), как редуктор 1 вычисляет правильное количество слов?

Если это невозможно, и разделы 1 и 3 будут направлены на переход к редуктору 1, как это сделает Hadoop? Проверяет ли она, что заданная пара ключ-значение из разных узлов всегда идет к одному и тому же редуктору? Если так, то как это происходит?

Спасибо, Суреш.

Ваш Ответ

1   ответ
4

В вашей ситуации, поскольку раздел 1 и раздел 3 оба с ключом «WHO», гарантируется, что оба раздела были подключены к одному и тому же редуктору.

Update

В hadoop максимальное количество задач по сокращению на одно приложение для задач в любой момент времени определяетсяmapred.tasktracker.reduce.tasks.maximum имущество.
И число редукторов для задания MapReduce устанавливается через-D mapred.reduce.tasks=n

When there are multiple reducers, the map tasks partition their output, each creating one partition for each reduce task. There can be many keys (and their associated values) in each partition, but the records for any given key are all in a single partition. The partitioning can be controlled by a user-defined partitioning function, but normally the default partitioner—which buckets keys using a hash function—works very well.(Hadoop: The definitive guide)

Таким образом, значение с указанным ключом всегда будет идти к одному и тому же редуктору.

Error: User Rate Limit Exceeded Suresh
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededgetPartition(K2 key, V2 value, int numPartitions) { return (key.hashCode() & Integer.MAX_VALUE) % numPartitions;}Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Suresh

Похожие вопросы