Архитектура 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) привилегии на использование определенного количества ресурсов (памяти, ядер процессора и другие) в данной ноде.