Комментарии (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 используются во всех распределённых системах обработки данных.