Как Mapper и Reducer работают вместе "без" сортировки? - PullRequest
3 голосов
/ 30 мая 2019

Я знаю, как работает карта, и какие у меня шаги:

  • Отображение
  • Перемешивание и сортировка
  • Сокращение

Конечно, у меня есть Partitioning, Combiners, но это сейчас не важно.

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

enter image description here

Так что я не понимаю, как это возможно.

Вопрос 1. Если у меня есть несколько узлов, которые выполняют операцию отображения, как редуктор может начать работать?Потому что Редуктор не может начать работать без сортировки, верно? (вход должен быть отсортирован по Редуктору - если картограф все еще работает, вход не может быть отсортирован).

Вопрос 2. Если у меня несколько редукторов, как будут объединены окончательные данные?Другими словами, окончательные результаты должны быть отсортированы правильно?Это означает, что мы тратим дополнительного O (n * Log n) времени, чтобы объединить «несколько результатов редуктора?»

1 Ответ

2 голосов
/ 30 мая 2019

Редукторы могут начать копировать результаты из картографов, как только они станут доступны. Это называется фаза копирования задачи сокращения (см. Hadoop Подробное руководство, Глава 7 Как работает MapReduce).
Также оттуда:

... Когда все выходные данные карты будут скопированы, задача сокращения перемещается в фаза sort (которую следует правильно назвать фазой merge , так как сортировка была выполнена на стороне карты), которая объединяет карту выходы, поддерживая их сортировку. Это делается в раундах ...

...