Архитектура YARN
YARN планирует запуск приложений и организует распределение ресурсов кластера между различными процессами обработки данных, такими как пакетная (batch processing), интерактивная (interactive processing) и потоковая (stream processing).
YARN включает следующие компоненты:
-
Resource Manager — главный сервис по управлению распределением ресурсов в кластере.
-
Node Manager — сервис, устанавливаемый на каждую ноду HDFS DataNode и отвечающий за предоставление ресурсов приложениям, работающим на этой ноде. Он подчиняется Resource Manager.
-
Application Master — временный процесс, координирующий полный цикл работы одного приложения. Он взаимодействует с Resource Manager и Node Managers для запуска и мониторинга работы приложений.
-
Container — это логический набор ресурсов, включая часть оперативной памяти, ядер процессора, сетевых ресурсов, диска и других исчисляемых ресурсов одной ноды. Эти ресурсы выделяются для одного приложения.
Resource Manager
Resource Manager является главным "распорядителем" всех вычислительных ресурсов кластера. Он получает данные о наличии ресурсов и принимает решение о выделении доступных ресурсов конкурирующим между собой приложениям. Когда он получает запрос на выделение ресурсов, он распределяет его в виде запросов к Node Managers тех нод, где будет производиться обработка данных. Resource Manager состоит из двух главных компонентов: планировщика (Scheduler) и менеджера приложений (Application Manager).
Scheduler
Планировщик является частью Resource Manager и выполняет следующие функции:
-
Отвечает за предоставление ресурсов приложениям с учетом ограничений на ресурсы, очереди и так далее.
-
Выполняет исключительно функции планирования, не затрагивая функции мониторинга и отслеживания состояния приложений. Если приложение перестает работать, планировщик не обеспечивает его восстановление.
-
Планирует запуск заданий (job), исходя из запросов ресурсов, приходящих от приложений.
-
Реализует свой алгоритм с помощью встраиваемого сервиса планирования. Им может быть Capacity Scheduler или Fair Scheduler, встраиваемые в Resource Manager. По умолчанию используется Capacity Scheduler.
Application Manager
Это еще одна часть Resource Manager, реализующая следующие возможности:
-
Принимает запросы на создание заданий (job).
-
Запрашивает Resource Manager создать первый контейнер для запуска в нем процесса Application Master, специфичного для приложений определенного типа.
-
Управляет работающими процессами Application Master и обеспечивает повторный старт такого процесса в случае сбоев.
Node Manager
Node Manager обеспечивает выделение ресурсов и управление приложениями в пределах одной ноды. Его главной функцией является управление контейнерами для приложений по запросам от Resource Manager.
Node Manager выполняет следующие операции:
-
Посылает в Resource Manager отчеты о состоянии ноды и наличии ресурсов.
-
Создает и контролирует контейнеры, в которых запускает процессы по запросам от Application Master.
-
Контролирует использование ресурсов в контейнерах.
-
Предоставляет сервис ведения журналов для контейнерных процессов.
-
Удаляет контейнеры по запросам от Application Master или Resource Manager.
Application Master
Любое приложение начинает свою работу в YARN в качестве отдельного задания (job). У каждого работающего приложения есть свой Application Master. Каждый тип приложений имеет свой Application Master, реализованный в виде JAR-файла и являющийся одним из необходимых приложению ресурсов. Например, задачи MapReduce используют MRAppMaster
.
Application Master координирует процессы приложения в кластере, включая слежение за сбоями и восстановление после них. Он запрашивает выделение ресурсов через Resource Manager и взаимодействует с Node Managers для запуска приложений в контейнерах и мониторинга процесса их выполнения. После своего старта он посылает периодические сигналы (heartbeat), содержащие данные о собственном состоянии и обновленный список необходимых ресурсов.
Container
Контейнер представляет собой коллекцию физических ресурсов, таких как оперативная память, ядра процессора и дисковое пространство, выделенные для определенного приложения в ноде кластера. Каждый контейнер YARN имеет собственный контекст запуска (launch context), используемый в течение всего жизненного цикла контейнера. Это запись, содержащая значения переменных окружения, токены безопасности, данные для передачи в Node Manager, команду для запуска процесса в контейнере и другие параметры. Контекст запуска гарантирует заданию (job) привилегии на использование определенного количества ресурсов (памяти, ядер процессора и другие) в данной ноде.