Используя Hadoop, мои редукторы гарантированно получают все записи с одним и тем же ключом?

Я запускаю Hadoop-задание, используя Hive на самом деле, который должен иметь uniq строки во многих текстовых файлах. На шаге уменьшения он выбирает самую последнюю временную запись для каждой клавиши.

Гарантирует ли Hadoop, что каждая запись с одним и тем же ключом, выводимая на шаге карты, перейдет к одному редуктору, даже если многие коммутаторы работают по кластеру?

Я волнуюсь, что вывод картографа может быть разделен после того, как тасование произойдет посередине набора записей с одним и тем же ключом.

Ответ 1

Все значения для ключа отправляются на один и тот же редуктор. Смотрите Yahoo! учебник для более подробного обсуждения.

Это поведение определяется разделителем и может быть неверным, если вы используете разделитель, отличный от стандартного.

Ответ 2

Собственно, нет! Вы можете создать Partitioner, который при каждом вызове getPartition отправил один и тот же ключ на другой редуктор. Это просто не очень хорошая идея для большинства приложений.

Ответ 3

Да, Hadoop гарантирует, что все ключи, которые одинаковы, перейдут к одному и тому же редуктору. Это достигается с помощью функции Partition, которая ведёт ключи с помощью хэш-функции.

Для получения дополнительной информации о процессе Разделение взгляните на это: Разделение данных

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