← Назад к вопросам

Что такое MapReduce?

2.0 Middle🔥 191 комментариев
#Hadoop и распределенные системы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

MapReduce

MapReduce — это парадигма распределённой обработки больших объёмов данных, разработанная Google для параллелизации вычислений на кластере машин. Это не просто фреймворк, а философия проектирования систем обработки данных, которая позволяет выполнять сложные операции путём разделения их на простые шаги.

Принцип работы

MapReduce состоит из двух фаз:

Map фаза — на каждом узле кластера:

  • Входные данные разбиваются на независимые блоки
  • Для каждого блока применяется функция map, которая преобразует входные пары ключ-значение в промежуточные пары
  • Результаты группируются по ключам

Reduce фаза:

  • Промежуточные значения с одинаковыми ключами отправляются на один узел
  • Функция reduce агрегирует все значения для каждого ключа
  • Выдаёт финальные пары ключ-значение

Пример: подсчёт слов в документах

from mrjob.job import MRJob

class WordCount(MRJob):
    def mapper(self, _, line):
        for word in line.split():
            yield word, 1
    
    def reducer(self, word, counts):
        yield word, sum(counts)

if __name__ == "__main__":
    WordCount.run()

Входные данные: файл с текстом. MapReduce:

  1. Map: разбивает текст, выдаёт (слово, 1) для каждого слова
  2. Shuffle & Sort: группирует по словам
  3. Reduce: суммирует единицы для каждого слова

Результат: список (слово, количество_вхождений)

Фазы выполнения в Hadoop

  1. Input Split — данные разбиваются на блоки
  2. Map — обработка блоков, генерация промежуточных (ключ, значение)
  3. Partition — распределение промежуточных данных по редьюсерам
  4. Sort & Group — сортировка по ключам и группировка значений
  5. Reduce — агрегация значений
  6. Output — запись результата

Достоинства и ограничения

Плюсы:

  • Горизонтальная масштабируемость
  • Отказоустойчивость (репликация данных, переправка упавших задач)
  • Простота программирования сложных вычислений
  • Работает с любыми типами данных

Минусы:

  • Медленнее для итеративных алгоритмов (Spark эффективнее)
  • Каждая фаза требует записи на диск
  • Сложновато писать для операций, не укладывающихся в парадигму
  • Требует глубокого понимания для оптимизации

Современный статус

MapReduce остаётся фундаментом, но в больших проектах вытесняется Apache Spark, который предоставляет более гибкую модель обработки с RDD (Resilient Distributed Datasets) и DataFrame API. Однако принципы MapReduce используются во всех распределённых системах обработки данных.

Что такое MapReduce? | PrepBro