Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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:
- Map: разбивает текст, выдаёт (слово, 1) для каждого слова
- Shuffle & Sort: группирует по словам
- Reduce: суммирует единицы для каждого слова
Результат: список (слово, количество_вхождений)
Фазы выполнения в Hadoop
- Input Split — данные разбиваются на блоки
- Map — обработка блоков, генерация промежуточных (ключ, значение)
- Partition — распределение промежуточных данных по редьюсерам
- Sort & Group — сортировка по ключам и группировка значений
- Reduce — агрегация значений
- Output — запись результата
Достоинства и ограничения
Плюсы:
- Горизонтальная масштабируемость
- Отказоустойчивость (репликация данных, переправка упавших задач)
- Простота программирования сложных вычислений
- Работает с любыми типами данных
Минусы:
- Медленнее для итеративных алгоритмов (Spark эффективнее)
- Каждая фаза требует записи на диск
- Сложновато писать для операций, не укладывающихся в парадигму
- Требует глубокого понимания для оптимизации
Современный статус
MapReduce остаётся фундаментом, но в больших проектах вытесняется Apache Spark, который предоставляет более гибкую модель обработки с RDD (Resilient Distributed Datasets) и DataFrame API. Однако принципы MapReduce используются во всех распределённых системах обработки данных.
Похожие вопросы
- Как взаимодействуют партиции Kafka, консьюмеры и консьюмер-группы?
- Какие инструменты использовал для обработки данных в pipeline?
- Как выяснить требования у нетехнического заказчика?
- Какие есть важные термины при масштабировании записи в Kafka?
- Какие делал бы типы проверок качества данных?
- Как с помощью airflow пересчитать витрины?
- В чем разница между kafka и RabbitMQ?
- Как найти причину падения конверсии на 10%?
- В чем разница между narrow (узкими) и wide (широкими) операциями в Apache Spark?
- Что такое data governance и почему это важно?
- Какие фреймворки для валидации данных применял?
- Что такое materialized views и когда их использовать?
- Расскажи про различиях в моделях данных
- Как оптимизировать рекламный бюджет на основе данных?
- Что такое CAP-теорема и как она влияет на выбор базы данных?
- Что такое триггеры в SQL и когда их использовать?
- В чем разница между коррелированным и некоррелированным подзапросом?
- Что такое Slowly Changing Dimensions (типы SCD)?
- Чем отличается dbt от хранимых процедур?
- Как решали вопрос приоритезации раздачи ресурсов?