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

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

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

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

Ответы [ 3 ]

14 голосов
/ 14 апреля 2010

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

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

5 голосов
/ 14 апреля 2010

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

3 голосов
/ 14 апреля 2010

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

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

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

...