Это седьмой день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления
Полное издание — Полное руководство по Hadoop, 3-е издание
1. Подача задания
- MR runJob
- Получить новый идентификатор задания от RM
- Клиент задания проверяет выходное описание задания, вычисляет входные сегменты и копирует ресурсы задания (включая JAR-файл задания, конфигурацию и информацию о сегменте) в HDFS.
- Отправьте задание, вызвав метод submitApplication() на RM.
2. Инициализация задания
- После того, как менеджер ресурсов получит сообщение submitapplication(), вызвавшее его, он передает запрос планировщику. Планировщик выделяет Контейнер, а затем запускает главный процесс приложения (AM) в Контейнере под управлением NM.
- AM инициализирует задание: отслеживает ход выполнения задания, создавая несколько объектов, поскольку он будет принимать отчеты о ходе выполнения и завершении задач.
- Получите входные сегменты, вычисленные HDFS на стороне клиента, и создайте MapTask и N ReduceTasks (N=mapreduce.job.reduces) для каждого сегмента. AM решает, как выполнять отдельные задачи, и помещает небольшие задачи в одну и ту же JVM для запуска. Перед запуском задачи вызывается метод задания setup() для настройки выходного каталога задания, чтобы установить OutputCommitter задания.
3. Постановка задач
- AM запрашивает контейнеры для MapTask и ReduceTask у RM. Запрос на присоединение информации пульса включает в себя информацию о локализации данных каждой задачи сопоставления, особенно хост, на котором расположен входной сегмент, и соответствующую информацию о стойке. Планировщик использует эту информацию для принятия решений по планированию. В идеале он назначает задачи узлам, локализованным в данных, но если это невозможно, планировщик предпочтет назначения, локализованные в стойке, а не нелокализованные. В запросе также указываются требования к памяти для задачи.
4. Выполнение задачи
- Как только планировщик RM назначает Контейнер задаче, AM начинает с связи с NM. Эта задача выполняется приложением Java, основным классом которого является YarnChild.
- Прежде чем YarnChild запустит задачу, он сначала локализует ресурсы, необходимые задаче, включая конфигурацию задания, файлы JAR и все файлы из распределенного кеша.
- Наконец, запустите задачи Map или Reduce.
5. Обновления прогресса и статуса
Каждые три секунды задачи сообщают о ходе выполнения и состоянии (включая счетчики) в AM через интерфейс шлангокабеля в виде совокупного представления задания. Клиенты запрашивают AM каждую секунду, чтобы получать обновления о ходе выполнения, которые обычно отображаются пользователю.
6. Миссия выполнена
В дополнение к запросу AM для выполнения, клиент также проверяет завершение задания, вызывая задание waitForCompletion() каждые 5 секунд.
Обратите внимание, что завершение задания с помощью обратных вызовов HTTP ( callback ) также поддерживается. Однако в MapReduce обратные вызовы инициализируются AM.
После завершения задания AM и контейнер задач очищают свое рабочее состояние, и вызывается метод Job Cleanup объекта OutputCommitter. Сервер истории заданий сохраняет информацию о заданиях, чтобы пользователи могли запросить ее при необходимости.
персональная версия
Простая версия
Отправляя пакет jar для обработки MapReduce, весь текущий процесс делится на пять шагов:
- Отправьте задание MapReduce на сторону клиента.
- Затем ResourceManager пряжи выделяет ресурсы.
- Загруженные и отслеживаемые контейнеры с помощью NodeManager.
- ApplicationMaster и ResourceManager управляют приложением ресурса и взаимодействием состояния, а NodeManager управляет заданиями среды выполнения MapReduce.
- Распространите файлы конфигурации заданий и пакеты jar на каждый узел через hdfs.
Подробная версия
Ниже приведена последовательность событий, происходящих при запуске приложения MapReduce в кластере YARN.
- Клиент отправляет запрос приложения MapReduce v2 (MRv2) в ResourceManager следующим образом:
hadoop jar wordcount.jar WordCount testdata output
- Компонент ApplicationManager ResourceManager инструктирует NodeManager (один из которых работает на каждом рабочем узле) для запуска нового экземпляра ApplicationMaster для приложения. Это контейнер 0 для приложения. Контейнеры, которые запускают преобразователь и редьюсер, будут созданы позже и названы 01, 02, 03 и т. д.
- ApplicationMaster инициализирует себя, регистрируясь в ResourceManager.
- ApplicationMaster вычисляет ресурсы, необходимые для выполнения приложения. ApplicationMaster определяет количество задач Map, которые должны быть запущены, на основе среза входных данных. Он вычисляет количество входных разбиений, запрашивая имя входного файла и расположение блока данных, требуемого приложением. Используя эту информацию, ApplicationMaster рассчитывает количество задач Map, необходимых для обработки входных данных.
- ApplicationMaster запрашивает ResourceManager о выделении необходимых контейнеров для задач Map. Он поддерживает связь с ResourceManager на протяжении всего жизненного цикла приложения, гарантирует, что ResourceManager соблюдает список необходимых ему ресурсов, и отправляет некоторые необходимые запросы на уничтожение для уничтожения задач.
- Компонент планировщика диспетчера ресурсов определяет, на каком узле выполняется задача сопоставления. Ключевые факторы, влияющие на принятие этого решения, включают расположение данных и доступную память на узлах, которые поддерживают создание новых контейнеров, выполняющих задачи. ResourceManager ставит в очередь запросы ресурсов от ApplicationMaster и предоставляет аренду контейнерам на определенных узлах, когда ресурсы доступны на узлах.
- ApplicationMaster инструктирует NodeManager создать контейнер на узле, которому он был выделен.
- NodeManager создает запрошенные контейнеры и запускает их. Контейнер отправляет состояние выполнения MapReduce в ApplicationMaster (для каждого задания существует только один ApplicationMaster).
- ApplicationMaster запрашивает ресурсы у ResourceManager для задач Reduce (некоторые из них не нужны, если приложение MapReduce включает Reduce).
- ApplicationMaster запрашивает NodeManager для запуска задач сокращения на узлах, где ResourceManager выделяет ресурсы для задач сокращения.
- Задача Reduce выполняет операции Shuffle и Sort с промежуточными данными преобразователя и записывает выходные данные в HDFS (внешний каталог).
- NodeManager отправляет отчеты о состоянии и работоспособности в ResourceManager. После завершения всех задач ApplicationMaster отправляет результаты клиентскому приложению и отправляет информацию о задании и журналы на сервер JobHistoryServer. Контейнер задач очищает свое состояние и удаляет промежуточный вывод из локальной файловой системы.
- После завершения работы приложения ApplicationMaster уведомляет ResourceManager об успешном завершении задания, выходит из ResourceManager и завершает работу.
- ResourceManager освобождает все ресурсы (контейнеры), удерживаемые приложением, для повторного использования кластером.
Пополнить
Процесс инициализации задания
- Когда менеджер ресурсов получает уведомление о вызове метода submitApplication(), планировщик начинает выделять контейнер, Затем ResourceManager отправляет процесс applicationMaster для информирования каждого менеджера nodeManager.
- Мастер приложения должен решить, как выполнять задачи.Если объем данных задания невелик, мастер приложения выбирает выполнение задач в JVM.
Что является основанием для приговора?
- Когда количество картографов в задании меньше 10 (mapreduce.job.ubertask.maxmaps)
- Редуктор всего один (mapreduce.job.ubertask.maxreduces)
- Размер прочитанного файла должен быть меньше одного блока HDFS (mapreduce.job.ubertask.maxbytes).
- Перед запуском задач applicationMaster вызывает метод setupJob(), который создает выходной путь вывода.
Это может объяснить, независимо от того, сообщает ли mapreduce об ошибке в начале, выходной путь будет создан
Постановка задачи
- Затем applicationMaster запрашивает контейнеры у ResourceManager для выполнения задач сопоставления и сокращения, где задача сопоставления имеет более высокий приоритет, чем задача сокращения. Когда все задачи карты завершены, следует сортировка (вот процесс перемешивания) и, наконец, запуск задачи сокращения.
Когда задачи карты выполняются 5% времени, будет запрошено сокращение
- Выполнение задач потребляет память и ресурсы ЦП. По умолчанию задачам сопоставления и сокращения выделяется 1024 МБ и одно ядро.
Соответствующие изменяемые минимальные и максимальные конфигурации параметров для запуска: mapreduce.map.memory.mb mapreduce.reduce.memory.mb mapreduce.map.cpu.vcores mapreduce.reduce.reduce.cpu.vcores
Выполнение задачи задачи
- В это время ResourceManager назначил контейнеру задачу, и applicationMaster сообщает диспетчеру узлов запустить контейнер. Эта задача будет выполняться приложением Java, основной функцией которого является YarnChild, но перед запуском задачи сначала найдите пакеты jar, файлы конфигурации и файлы, загруженные в кэш, которые необходимы задаче.
- YarnChild работает на выделенной JVM, поэтому любая проблема с любой задачей map или reduce не повлияет на нормальную работу всего nodemanager.
- Каждая задача может быть выполнена в одной и той же задаче JVM, при этом завершенные данные обработки записываются во временный файл.
Запуск обновлений прогресса и статуса
MapReduce — это пакетный процесс с длительным временем выполнения, которое может составлять час, несколько часов или даже несколько дней, поэтому очень важно отслеживать состояние выполнения задания.
Каждое задание и каждая задача имеют статус, включая задание (выполняется, успешно завершено, не удалось), а также счетчик значений, информацию о состоянии и информацию описания (информация описания обычно печатается и добавляется к коду).
Как эта информация доводится до клиента?
Когда задача начинает выполняться, она будет вести запись выполнения и записывать долю выполнения задачи. Для задач карты она будет записывать процент выполнения. Это может быть сложнее для сокращения, но система все равно будет оценивать степень выполнения сокращения. . При выполнении задачи map или reduce дочерний процесс продолжает взаимодействовать с applicationMaster каждые три секунды.