10
обрабатывается на отдельной машине. Вызовы reduce распределены на R
частей, количество которых определяется пользователем.
При вызове функции из библиотеки MapReduce выполняется примерно
такая последовательность операций (рисунок 2):
1) входные файлы разбиваются на срезы размером от 16 до 64 Мбайт
каждый, и на кластере запускаются копии программы. Одна из них менеджер, а
остальные – исполнители. Всего создается M задач map и R задач reduce.
Поиском свободных узлов и назначением на них задач занимается менеджер;
2) в процессе
исполнения исполнители, назначенные на выполнение
задачи map, считывают содержимое соответствующих срезов, осуществляют их
грамматический разбор, выделяют отдельные пары «ключ и соответствующее
ему значение», а потом передают эти пары в обрабатывающую их функцию
map. Промежуточное значение в виде идентификатора и значения буферизуется
в памяти;
3) периодически буферизованные пары сбрасываются на локальный
диск, разделенный на R областей. Расположение
этих пар передается
менеджеру, который отвечает за дальнейшую передачу этих адресов
исполнителям, выполняющим reduce;
4) исполнители, выполняющие задачу reduce, ждут сообщения от
менеджера о местоположении промежуточных пар. По
его получении они,
используя процедуры удаленного вызова, считывают буферизованные данные с
локальных дисков тех исполнителей, которые выполняют map. Загрузив все
промежуточные данные, исполнитель сортирует их по промежуточным ключам
и, если есть необходимость, группирует;
Пользовательская
программа
Менеджер
Исполнитель
Исполнитель
(4) локальная
запись
Исполнитель
Исполнитель
Исполнитель
Срез 0
Срез 1
Срез 2
Срез 3
Срез 4
(5) удаленное
чтение
(3) чтение
Выход 0
Выход 1
(6) запись
(2) назначение
reduce
(2) назначение
map
(1) ветвление
(1) ветвление
(1) ветвление
Входные
файлы
Фаза Map
Промежуточные файлы
локальных дисках
Фаза Reduce
Выходные
файлы
Рисунок 2 — Ход выполнения вызова MapReduce
11
5) исполнитель обрабатывает данные по промежуточным ключам и
передает их в соответствующую функцию reduce для вывода результатов;
6) когда все задачи map и reduce завершаются, конструкция MapReduce
возобновляет работу вызывающей программы и та продолжает выполнять
пользовательский код.
Одно из важнейших преимуществ этой, замысловатой на первый взгляд,
конструкции состоит в том, что она позволяет надежно работать на платформах
с низкими показателями надежности. Для обнаружения потенциальных сбоев
менеджер периодически
опрашивает исполнителей, и, если какой-то из них
задерживается с ответом сверх заданного норматива, менеджер считает его
дефектным и передает исполнение на свободные узлы. Различие между
задачами map и reduce в
данном случае состоит в том, что map хранит
промежуточные результаты на своем диске, и выход из строя такого узла
приводит к их потере и требует повторного запуска,
а reduce хранит свои
данные в глобальном хранилище.
Достарыңызбен бөлісу: