Графическое и текстовое объяснение MapReduce на YARN

Hadoop

Это седьмой день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления

Полное издание — Полное руководство по Hadoop, 3-е издание

在这里插入图片描述

1. Подача задания

  1. MR runJob
  2. Получить новый идентификатор задания от RM
  3. Клиент задания проверяет выходное описание задания, вычисляет входные сегменты и копирует ресурсы задания (включая JAR-файл задания, конфигурацию и информацию о сегменте) в HDFS.
  4. Отправьте задание, вызвав метод submitApplication() на RM.

2. Инициализация задания

  1. После того, как менеджер ресурсов получит сообщение submitapplication(), вызвавшее его, он передает запрос планировщику. Планировщик выделяет Контейнер, а затем запускает главный процесс приложения (AM) в Контейнере под управлением NM.
  2. AM инициализирует задание: отслеживает ход выполнения задания, создавая несколько объектов, поскольку он будет принимать отчеты о ходе выполнения и завершении задач.
  3. Получите входные сегменты, вычисленные HDFS на стороне клиента, и создайте MapTask и N ReduceTasks (N=mapreduce.job.reduces) для каждого сегмента. AM решает, как выполнять отдельные задачи, и помещает небольшие задачи в одну и ту же JVM для запуска. Перед запуском задачи вызывается метод задания setup() для настройки выходного каталога задания, чтобы установить OutputCommitter задания.

3. Постановка задач

  1. AM запрашивает контейнеры для MapTask и ReduceTask у RM. Запрос на присоединение информации пульса включает в себя информацию о локализации данных каждой задачи сопоставления, особенно хост, на котором расположен входной сегмент, и соответствующую информацию о стойке. Планировщик использует эту информацию для принятия решений по планированию. В идеале он назначает задачи узлам, локализованным в данных, но если это невозможно, планировщик предпочтет назначения, локализованные в стойке, а не нелокализованные. В запросе также указываются требования к памяти для задачи.

4. Выполнение задачи

  1. Как только планировщик RM назначает Контейнер задаче, AM начинает с связи с NM. Эта задача выполняется приложением Java, основным классом которого является YarnChild.
  2. Прежде чем YarnChild запустит задачу, он сначала локализует ресурсы, необходимые задаче, включая конфигурацию задания, файлы JAR и все файлы из распределенного кеша.
  3. Наконец, запустите задачи Map или Reduce.

5. Обновления прогресса и статуса

Каждые три секунды задачи сообщают о ходе выполнения и состоянии (включая счетчики) в AM через интерфейс шлангокабеля в виде совокупного представления задания. Клиенты запрашивают AM каждую секунду, чтобы получать обновления о ходе выполнения, которые обычно отображаются пользователю.

6. Миссия выполнена

В дополнение к запросу AM для выполнения, клиент также проверяет завершение задания, вызывая задание waitForCompletion() каждые 5 секунд.

Обратите внимание, что завершение задания с помощью обратных вызовов HTTP ( callback ) также поддерживается. Однако в MapReduce обратные вызовы инициализируются AM.

После завершения задания AM и контейнер задач очищают свое рабочее состояние, и вызывается метод Job Cleanup объекта OutputCommitter. Сервер истории заданий сохраняет информацию о заданиях, чтобы пользователи могли запросить ее при необходимости.

персональная версия

Простая версия

Отправляя пакет jar для обработки MapReduce, весь текущий процесс делится на пять шагов:

  1. Отправьте задание MapReduce на сторону клиента.
  2. Затем ResourceManager пряжи выделяет ресурсы.
  3. Загруженные и отслеживаемые контейнеры с помощью NodeManager.
  4. ApplicationMaster и ResourceManager управляют приложением ресурса и взаимодействием состояния, а NodeManager управляет заданиями среды выполнения MapReduce.
  5. Распространите файлы конфигурации заданий и пакеты jar на каждый узел через hdfs.

Подробная версия

在这里插入图片描述

Ниже приведена последовательность событий, происходящих при запуске приложения MapReduce в кластере YARN.

  1. Клиент отправляет запрос приложения MapReduce v2 (MRv2) в ResourceManager следующим образом:
hadoop jar wordcount.jar WordCount testdata output
  1. Компонент ApplicationManager ResourceManager инструктирует NodeManager (один из которых работает на каждом рабочем узле) для запуска нового экземпляра ApplicationMaster для приложения. Это контейнер 0 для приложения. Контейнеры, которые запускают преобразователь и редьюсер, будут созданы позже и названы 01, 02, 03 и т. д.
  2. ApplicationMaster инициализирует себя, регистрируясь в ResourceManager.
  3. ApplicationMaster вычисляет ресурсы, необходимые для выполнения приложения. ApplicationMaster определяет количество задач Map, которые должны быть запущены, на основе среза входных данных. Он вычисляет количество входных разбиений, запрашивая имя входного файла и расположение блока данных, требуемого приложением. Используя эту информацию, ApplicationMaster рассчитывает количество задач Map, необходимых для обработки входных данных.
  4. ApplicationMaster запрашивает ResourceManager о выделении необходимых контейнеров для задач Map. Он поддерживает связь с ResourceManager на протяжении всего жизненного цикла приложения, гарантирует, что ResourceManager соблюдает список необходимых ему ресурсов, и отправляет некоторые необходимые запросы на уничтожение для уничтожения задач.
  5. Компонент планировщика диспетчера ресурсов определяет, на каком узле выполняется задача сопоставления. Ключевые факторы, влияющие на принятие этого решения, включают расположение данных и доступную память на узлах, которые поддерживают создание новых контейнеров, выполняющих задачи. ResourceManager ставит в очередь запросы ресурсов от ApplicationMaster и предоставляет аренду контейнерам на определенных узлах, когда ресурсы доступны на узлах.
  6. ApplicationMaster инструктирует NodeManager создать контейнер на узле, которому он был выделен.
  7. NodeManager создает запрошенные контейнеры и запускает их. Контейнер отправляет состояние выполнения MapReduce в ApplicationMaster (для каждого задания существует только один ApplicationMaster).
  8. ApplicationMaster запрашивает ресурсы у ResourceManager для задач Reduce (некоторые из них не нужны, если приложение MapReduce включает Reduce).
  9. ApplicationMaster запрашивает NodeManager для запуска задач сокращения на узлах, где ResourceManager выделяет ресурсы для задач сокращения.
  10. Задача Reduce выполняет операции Shuffle и Sort с промежуточными данными преобразователя и записывает выходные данные в HDFS (внешний каталог).
  11. NodeManager отправляет отчеты о состоянии и работоспособности в ResourceManager. После завершения всех задач ApplicationMaster отправляет результаты клиентскому приложению и отправляет информацию о задании и журналы на сервер JobHistoryServer. Контейнер задач очищает свое состояние и удаляет промежуточный вывод из локальной файловой системы.
  12. После завершения работы приложения ApplicationMaster уведомляет ResourceManager об успешном завершении задания, выходит из ResourceManager и завершает работу.
  13. ResourceManager освобождает все ресурсы (контейнеры), удерживаемые приложением, для повторного использования кластером.

Пополнить

Процесс инициализации задания

  1. Когда менеджер ресурсов получает уведомление о вызове метода submitApplication(), планировщик начинает выделять контейнер, Затем ResourceManager отправляет процесс applicationMaster для информирования каждого менеджера nodeManager.
  2. Мастер приложения должен решить, как выполнять задачи.Если объем данных задания невелик, мастер приложения выбирает выполнение задач в JVM.

Что является основанием для приговора?

  1. Когда количество картографов в задании меньше 10 (mapreduce.job.ubertask.maxmaps)
  2. Редуктор всего один (mapreduce.job.ubertask.maxreduces)
  3. Размер прочитанного файла должен быть меньше одного блока HDFS (mapreduce.job.ubertask.maxbytes).
  1. Перед запуском задач applicationMaster вызывает метод setupJob(), который создает выходной путь вывода.

Это может объяснить, независимо от того, сообщает ли mapreduce об ошибке в начале, выходной путь будет создан

Постановка задачи

  1. Затем applicationMaster запрашивает контейнеры у ResourceManager для выполнения задач сопоставления и сокращения, где задача сопоставления имеет более высокий приоритет, чем задача сокращения. Когда все задачи карты завершены, следует сортировка (вот процесс перемешивания) и, наконец, запуск задачи сокращения.

Когда задачи карты выполняются 5% времени, будет запрошено сокращение

  1. Выполнение задач потребляет память и ресурсы ЦП. По умолчанию задачам сопоставления и сокращения выделяется 1024 МБ и одно ядро.

Соответствующие изменяемые минимальные и максимальные конфигурации параметров для запуска: mapreduce.map.memory.mb mapreduce.reduce.memory.mb mapreduce.map.cpu.vcores mapreduce.reduce.reduce.cpu.vcores

Выполнение задачи задачи

  1. В это время ResourceManager назначил контейнеру задачу, и applicationMaster сообщает диспетчеру узлов запустить контейнер. Эта задача будет выполняться приложением Java, основной функцией которого является YarnChild, но перед запуском задачи сначала найдите пакеты jar, файлы конфигурации и файлы, загруженные в кэш, которые необходимы задаче.
  2. YarnChild работает на выделенной JVM, поэтому любая проблема с любой задачей map или reduce не повлияет на нормальную работу всего nodemanager.
  3. Каждая задача может быть выполнена в одной и той же задаче JVM, при этом завершенные данные обработки записываются во временный файл.

Запуск обновлений прогресса и статуса

MapReduce — это пакетный процесс с длительным временем выполнения, которое может составлять час, несколько часов или даже несколько дней, поэтому очень важно отслеживать состояние выполнения задания.

Каждое задание и каждая задача имеют статус, включая задание (выполняется, успешно завершено, не удалось), а также счетчик значений, информацию о состоянии и информацию описания (информация описания обычно печатается и добавляется к коду).

Как эта информация доводится до клиента?

Когда задача начинает выполняться, она будет вести запись выполнения и записывать долю выполнения задачи. Для задач карты она будет записывать процент выполнения. Это может быть сложнее для сокращения, но система все равно будет оценивать степень выполнения сокращения. . При выполнении задачи map или reduce дочерний процесс продолжает взаимодействовать с applicationMaster каждые три секунды.