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

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

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

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


person samg    schedule 13.04.2010    source источник


Ответы (3)


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

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

person Karl Anderson    schedule 13.04.2010
comment
на самом деле я не уверен в этом. См. stackoverflow.com/questions/26693034/ . Я не менял разделитель в своей программе. - person Madrugada; 02.11.2014

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

person Bkkbrad    schedule 14.04.2010

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

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

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

person Binary Nerd    schedule 13.04.2010