Это изображение не отображает фактические узлы.Вместо этого каждый прямоугольник тасования / уменьшения представляет собой одну функцию , вызывающую до reduce()
.Их 7, потому что на этапе картографирования было выпущено 7 разных ключей.Эти вызовы распределяются между заданиями .Вы сами настраиваете количество задач уменьшения с помощью job.setNumReduceTasks(5)
.Если у вас есть одна задача сокращения, все вызовы будут происходить там.Если у вас есть две задачи сокращения, некоторые вызовы произойдут в первой задаче сокращения, другие - в другой (как контролируется Partitioner
).Если у вас есть 1000 задач сокращения, только некоторые задачи сокращения получат вызовы reduce()
, другие вообще не будут обрабатывать данные.
Задачи сокращения запускаются как отдельные процессы на физических узлах кластера.Все они могут запускаться одновременно или нет (зависит от того, сколько у вас ресурсов, а также от вашего планировщика).