Несколько лет назад MapReduce был провозглашен революцией в распределенном программировании. Также были критики но в целом был восторженный ажиотаж. Он даже запатентован! [1]
Название напоминает map
и о reduce
функциональном программировании, но когда я читаю (Википедия)
Шаг отображения: главный узел принимает входные данные, разделяет их на более мелкие подзадачи и распределяет их по рабочим узлам. Рабочий узел может сделать это снова по очереди, что приведет к многоуровневой древовидной структуре. Рабочий узел обрабатывает меньшую проблему и передает ответ своему главному узлу.
Шаг сокращения: главный узел затем собирает ответы на все подзадачи и каким-то образом объединяет их для формирования выходных данных - ответа на проблему, которую он первоначально пытался решить.
или [2]
Внутренние элементы MAP: [...] MAP разбивает входное значение на слова. [...] MAP предназначен для связывания каждой данной пары ключ / значение ввода с потенциально большим количеством промежуточных пар ключ / значение.
Внутренние элементы REDUCE: [...] [REDUCE] выполняет обязательное агрегирование (скажем, сокращение): принимает много значений и сводит их к одному значению.
Я не могу не думать: это разделяй и властвуй (в смысле Mergesort), просто и понятно! Итак, есть ли в MapReduce (концептуальная) новизна или это просто новая реализация старых идей, полезная в определенных сценариях?