Узкое место пропускной способности сети для сортировки промежуточных ключей mapreduce? - PullRequest
5 голосов
/ 11 марта 2010

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

1 000 000 x 1 000 000

: потенциальные машины сообщают друг другу маленькие пары ключ / значение промежуточных результатов? Разве это не узкое место?

1 Ответ

7 голосов
/ 13 марта 2010

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

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

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

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

Чтобы уменьшить объем данных, необходимых для отправки по сети, вы можете применить функцию объединения к выводу карты. Это приводит к уменьшению выходных данных с карты. Таким образом, вы можете минимизировать объем данных, которые необходимо передать редукторам, и ускорить время выполнения всего задания.

...