2. Отчет о состоянии: TaskTracker регулярно отправляет отчеты о состоянии выполнения задач обратно JobTracker'у. Эти отчеты включают информацию о прогрессе выполнения задач, использовании ресурсов и любых возникших ошибках. Это позволяет JobTracker оперативно реагировать на любые проблемы и переназначать задачи, если это необходимо.
3. Локальная обработка данных: TaskTracker пытается выполнить задачи Map на данных, которые физически находятся на том же узле или поблизости, что минимизирует сетевой трафик и увеличивает эффективность обработки данных. Это достигается за счет интеграции с HDFS, где данные распределяются между узлами кластера.
Архитектура "мастер-слейв" в MapReduce также включает механизмы обработки сбоев, которые особенно важны для больших кластеров:
1. Перезапуск задач: Если TaskTracker не может завершить задачу из-за сбоя узла, JobTracker переназначает эту задачу другому TaskTracker'у. Это гарантирует, что задание будет выполнено, даже если часть узлов кластера выходит из строя.
2. Замена TaskTracker: В случае сбоя целого узла, включая его TaskTracker, JobTracker обнаруживает, что TaskTracker перестал отправлять отчеты о состоянии, и перестраивает распределение задач таким образом, чтобы другие узлы взяли на себя выполнение оставшихся задач.
3. Функция «сброс задач»: Если задача слишком долго остается в состоянии выполнения или возникает подозрение на сбой, JobTracker может принять решение о "сбросе" задачи и назначении ее новому TaskTracker'у для выполнения. Это предотвращает зависание задания и ускоряет его завершение.
Архитектура "мастер-слейв" в MapReduce с использованием JobTracker и TaskTracker обеспечивает централизованное управление заданиями и эффективное распределение задач по узлам кластера. JobTracker координирует все аспекты выполнения задания, включая распределение задач, мониторинг выполнения и управление сбоями. TaskTracker, в свою очередь, выполняет задачи и регулярно отчитывается о своем состоянии. Этот подход обеспечивает высокую производительность, устойчивость к сбоям и эффективное использование ресурсов кластера, что делает MapReduce мощной и надежной системой для обработки больших данных.
Рассмотрим пример использования модели MapReduce для анализа логов веб-сервера. Допустим, у крупного интернет-магазина ежедневно накапливаются гигабайты логов, и задача состоит в том, чтобы подсчитать, сколько раз каждая страница была посещена за день. Этот пример идеально подходит для MapReduce, так как данные объемны, но легко параллелятся.
1. Подготовка данных
Предположим, что логи веб-сервера содержат строки, каждая из которых представляет собой запись о посещении определенной страницы. Пример строки может выглядеть так:
```
192.168.1.1 – – [24/Feb/2024:10:00:00] "GET /home.html HTTP/1.1" 200 1234
```
В этой строке указаны IP-адрес пользователя, время запроса, тип запроса (в данном случае GET) и запрашиваемый ресурс (`/home.html`).
2. Стадия Map
На этапе Map входные данные (логи) разделяются на небольшие фрагменты, которые обрабатываются параллельно на разных узлах. Каждый фрагмент данных передается функции Map, которая извлекает запрашиваемую страницу и создает пары ключ-значение, где ключ – это имя страницы, а значение – число 1.
Для указанного выше примера строки функция Map создаст пару:
```
("/home.html", 1)
```
Эти пары ключ-значение будут сгенерированы для каждой строки лога, независимо от того, какой узел обрабатывает данные.
3. Сортировка и перегруппировка (Shuffle and Sort)
После того как функция Map сгенерировала все пары ключ-значение, система MapReduce автоматически сортирует и перегруппировывает их по ключам. На этом этапе все пары с одинаковыми ключами (например, все записи `/home.html`) собираются вместе и передаются на следующую стадию – Reduce. Например, если `/home.html` была посещена 10 раз, то все эти пары будут сгруппированы как: