Что такое MapReduce?

«Что такое MapReduce?» — вопрос из категории Hadoop и HDFS, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Принцип работы: Задача разбивается на две основные фазы:

  1. Map (Отображение):

    • Входные данные разбиваются на независимые фрагменты (сплиты).
    • На каждом узле кластера запускается множество Mapper-задач.
    • Каждый Mapper обрабатывает один сплит, применяя пользовательскую функцию. На выходе он генерирует набор промежуточных пар ключ-значение.
      // Пример: Подсчёт слов. Mapper читает строку и emits (ключ: слово, значение: 1)
      map(String key, String value):
      for word in value.split():
          emit(word, 1)
  2. Shuffle & Sort:

    • Фреймворк автоматически распределяет все промежуточные пары с одинаковым ключом на один и тот же узел для Reducer-а.
    • Данные сортируются по ключу.
  3. Reduce (Свёртка):

    • На каждом узле запускаются Reducer-задачи.
    • Reducer получает все значения для определённого ключа, агрегирует их (суммирует, усредняет и т.д.) и записывает финальный результат.
      // Пример: Reducer суммирует все единицы для каждого слова
      reduce(String key, Iterator values):
      sum = 0
      for v in values:
          sum += v
      emit(key, sum)

Почему это было революционно (и где используется сейчас):

  • Отказоустойчивость: Фреймворк автоматически перезапускает упавшие задачи.
  • Локалитет данных: Задачи выполняются на узлах, где хранятся данные (HDFS), минимизируя сетевой трафик.
  • Наследие: Многие высокоуровневые инструменты (как Apache Hive, Pig) компилируют запросы в цепочки MapReduce-задач. Хотя сегодня для интерактивной аналитики чаще используются более быстрые движки (Apache Spark, Tez), понимание MapReduce критично для отладки и оптимизации работы в экосистеме Hadoop.