YARN: ResourceManager, NodeManager и ApplicationMaster
YARN представляет собой фундаментальный компонент современной экосистемы Hadoop, отвечающий за управление ресурсами и жизненным циклом приложений в распределенном кластере. Разделение ролей между ResourceManager, NodeManager и ApplicationMaster обеспечивает масштабируемость, многопользовательскую изоляцию и гибкость в работе разных вычислительных рамок - от MapReduce до Tez и Spark. В данной главе раскрываются архитектура и взаимодействия между этими компонентами, алгоритмы планирования, механизмы мониторинга и характерные сценарии эксплуатации. Особое внимание уделяется тому, как эти элементы работают вместе для эффективного использования ресурсов кластера, как обеспечивается отказоустойчивость и как интегрировать YARN в существующую инфраструктуру хранения и вычислений.
YARN задаёт модель управления ресурсами в Hadoop через три связующих элемента: ResourceManager как глобальный координатор, NodeManager на каждом узле кластера как исполнитель локальных задач, и ApplicationMaster как управляющий агент от имени каждого конкретного приложения. Взаимодействие между ними организовано через набор протоколов, сообщений и контекстов запуска контейнеров. Эта архитектура не только позволяет запускать различные вычислительные фреймфорки в одной среде, но и обеспечивает гибкую настройку квот, очередей и политик планирования. В условиях больших кластеров выбор оптимальной стратегии планирования имеет критическое значение: он влияет на задержки запуска, справедливость доступа к ресурсам и устойчивость к перегрузкам.
- Краткое содержание главы
- Архитектура YARN: роли ResourceManager, NodeManager и ApplicationMaster, ключевые протоколы взаимодействия.
- Планирование ресурсов: очереди, политики fairness и capacity, механизмы предвыброса и динамических изменений нагрузки.
- Жизненный цикл приложения: регистрация AM, запросы ресурсов, запуск контейнеров и завершение задач.
- Эксплуатация и мониторинг: телеметрия, диагностика, безопасность и отказоустойчивость.
Архитектура YARN: основы и протоколы
YARN разделяет ответственность за ресурсы и выполнение задач между тремя основными компонентами. ResourceManager выполняет роль глобального планировщика и координатора. Он принимает задания от приложений и определяет, какие ресурсы и на каких нодах выделить контейнеры под выполнение задач. NodeManager обеспечивает исполнение на конкретном узле: он следит за доступной памятью, CPU и дисковыми ресурсами, запускает и управляет жизненным циклом контейнеров, а также осуществляет мониторинг состояния процессов. ApplicationMaster является локальным руководителем конкретного приложения: он отвечает за стратегию выполнения работы внутри приложения, планирование задач и эффективное использование выделенных ресурсов. Взаимодействие между RM, NM и AM строится на обмене контекстами запуска контейнеров, запросами ресурсов и передаче статусов завершения или ошибок.
Контейнеры в YARN представляют собой изолированные единицы выполнения, которые требуют за собой минимальные и эффективные ресурсы на уровне виртуализации или контроля через cgroups. Контейнер несёт ресурсы (обычно память и количество виртуальных ядер), окружение и контекст запуска: команды, локальные файлы, переменные окружения и безопасные токены. Контейнеры обеспечивают изоляцию между задачами разных приложений и позволяют RM лучше учитывать общую нагрузку на кластер.
Коммуникационные протоколы внутри YARN опираются на две основные линии обмена. Первая - между ApplicationMaster и ResourceManager: AM регистрируется в RM, просит ресурсы, сообщает статус выполнения задач и получает решения по выделению контейнеров. Вторая - между ResourceManager и NodeManager: RM отправляет контекст запуска контейнеров на NM, NM запускает контейнеры и возвращает статус их выполнения. Особое внимание уделяется механизму сертификации и безопасности: токены и Kerberos обеспечивают аутентификацию между компонентами, а при необходимости - безопасный обмен между AM и RM.
С точки зрения архитектуры существует принципиальная возможность реализации нескольких парадигм планирования. По умолчанию в кластерах, где не применяются продвинутые планировщики, может применяться FIFO-режим. Однако для реального производственного окружения чаще применяются расширенные планировщики, такие как Capacity Scheduler и Fair Scheduler, которые позволяют разделять ресурсы между различными пользователями, отделами или проектами и обеспечивают предсказуемость выполнения в условиях пиковых нагрузок. Важной характеристикой архитектуры YARN является отказоустойчивость: RM может быть настроен в режиме высокодоступности (Active/Standby) с использованием механизма failover через ZooKeeper, что позволяет минимизировать простой кластера.
ResourceManager: роль, сервисы и протоколы взаимодействия
ResourceManager выступает как центральный контроллер, который управляет всем ресурсным пространством кластера. Он поддерживает глобальное планирование, учет ресурсов и координацию между ApplicationMasters. В RM реализованы несколько сервисов, таких как Scheduler (планировщик), ResourceTracker, ApplicationManager и, в современных реализациях, административный интерфейс RMAdmin. Scheduler - ключевой модуль, отвечающий за распределение доступных ресурсов между приложениями и их AM. В зависимости от выбранного плана, RM принимает заявку AM на создание контейнера, оценивает запрошенные ресурсы и предоставляет соответствующий слот на одной или нескольких нодах.
Процедура типичного цикла такова: AM подаёт запрос на ресурсы через контекст ContainerRequest, указав требования к памяти, виртуальным ядрам (vcores) и дополнительным параметрам окружения. RM, на основе текущего состояния кластера, данных о загрузке на нодах и политик очередей, принимает решение и возвращает набор разрешённых контейнеров, которые затем запускаются на соответствующих NodeManager. Взаимодействие продолжает осуществляться через Heartbeat-сообщения, сигналы об изменениях статуса и обновления прогресса. RM также ответственен за создание и управление ApplicationMaster'ами: когда новое приложение подаётся, RM выбирает ApplicationMaster (или ожидает, пока AM запустится внутри контейнера), регистрирует приложение и поддерживает его жизненный цикл до завершения.
С точки зрения планирования ресурсов RM доверяет решение политик очередей и алгоритмов планирования. В современных кластерах часто применяются два основных подхода: Capacity Scheduler и Fair Scheduler. Capacity Scheduler ориентирован на выделение фиксированных квот для очередей и обеспечивает гарантированное пушение ресурсов под задачи определённых отделов или проектов, даже при перегрузке кластера. Fair Scheduler стремится к равномерному распределению ресурсов между активными приложениями так, чтобы никакое из них не доминировало над другими. В обоих approaches присутствуют механизмы предвыброса (preemption), которые помогают перераспределить ресурсы в случаях критической нехватки памяти или CPU и предотвращают «засорение» кластера долгоживущими задачами. В RM реализованы инструменты мониторинга использования ресурсов, а также REST API для внешних систем мониторинга и автоматизации.
Помимо базовой функциональности, RM обеспечивает аспекты безопасности и управления доступом. В сценариях многоарендной среды RM должен корректно изолировать запросы и данные между разными пользователями и проектами. Роль RMAdmin позволяет администраторам вносить изменения в конфигурацию очередей, политик планирования и параметров монитора. Современные реализации допускают настройку High Availability (HA) и интеграцию с системами централизованной аутентификации, что критично для инфраструктур предприятий.
NodeManager и контейнеры: управление ресурсами на узле
NodeManager работает на каждом узле кластера и несёт ответственность за локальное управление ресурсами и жизненным циклом контейнеров. NM следит за доступной физической памятью, CPU, дисковым пространством и сетевой пропускной способностью. Он принимает контекст запуска контейнеров от RM и реализует фактический запуск процессов внутри контейнеров, изолируя их друг от друга. Контейнеры в рамках NM формируют локальный набор задач, который AM распределяет между собой в рамках выбранной стратегии выполнения.
Основные задачи NM включают:
- мониторинг использования ресурсов каждым контейнером и всей ноды;
- поддержание изоляции через платформенные механизмы, такие как cgroups, чтобы ограничить влияние отдельных контейнеров на соседние задачи;
- хранение локальных файловых артефактов и логов выполнения, которые затем собираются для централизованного анализа;
- обработку событий жизненного цикла контейнеров: запуск, приостановку, перезапуск и завершение.
С точки зрения эксплуатации, NodeManager обеспечивает устойчивость к отказам и гибкость в вопросах восстановления. При завершении задач NM возвращает RM информацию о прогрессе и статусе, позволяя RM корректно перераспределить ресурсы и повторно запустить задачи, если требуется. В критических случаях, таких как выход из строя процесса AM, RM и NM поддерживают механизм повторного запуска контейнеров и обеспечения целостности работы приложения.
Замечания о реализации безопасности: на уровне NM применяются механизмы верификации контекстов запуска и ограничений по доступу к файловым артефактам. В больших средах NM может взаимодействовать с внешними системами централизованных журналов и мониторинга, чтобы обеспечить консолидацию телеметрии и упрощение диагностики.
ApplicationMaster: логика приложения, жизненный цикл и сценарии
ApplicationMaster представляет собой управляющий агент от имени конкретного приложения. Он отвечает за планирование внутри приложения, координацию задач и эффективное использование ресурсов, выделенных RM. AM начинает работу после регистрации в RM и устанавливает коммуникацию через RPC-каналы. Основной набор задач AM включает:
- формирование требований к ресурсам и динамическое изменение потребностей по мере выполнения приложения;
- мониторинг статуса задач и прогресса выполнения, принятие решений о перераспределении контейнеров;
- управление зависимостями между задачами внутри приложения (например, этапы Map и Reduce в MR, стадии обработки в Tez или Spark);
- обработку сбоев и неудачных задач, повторный запуск или перенос задач на другие контейнеры.
AM, таким образом, действует как интеллектуальный координационный центр, который способен адаптировать стратегию выполнения под текущую загрузку кластера. В рамках классических сценариев для MRv2, Tez и Spark AM управляет рабочими графами задач и подготавливает контейнеры для выполнения задач внутри самих Executors. В случае отказа или перегрузки AM может перезапуститься внутри нового контейнера на другом узле, и RM, вместе с NM, поддержит восстановление состояния.
Важно подчеркнуть: AM не должен обладать глобальной видимостью всех задач всех приложений. Его роль ограничена конкретным приложением и его графом задач. Это позволяет снизить конфликт ресурсов между приложениями внутри одного AM и способствует лучшей масштабируемости и изоляции. В контексте безопасности AM получает необходимые контексты запуска и токены доступа и работает в рамках разрешённых политик очередей.
Развертывание AM зависит от вычислительного фреймворка. MRv2 использует AM, который знает граф MapReduce и может взаимодействовать с RM для выделения контейнеров под задачи. Spark и Tez запускают свои AM для координации задач внутри своей среды. Важно, чтобы поддержка AM надёжна и совместима с текущими требованиями к SLA и качеству обслуживания; в противном случае возможны чрезмерные задержки из-за перераспределения ресурсов или некорректной постановки задач.
Планирование, эксплуатация и мониторинг
Планирование ресурсов в YARN определяется политиками очередей и выбранным типом планировщика. Очереди позволяют администраторам отделять ресурсы между различными подразделениями, проектами или сервисами. В рамках каждого типа планирования RM контролирует диапазоны доступных ресурсов, периодически пересчитывает квоты и осуществляет перераспределение на основе текущей загрузки. В условиях пиковых нагрузок механизмы предвыброса позволяют RM перераспределять ресурсы от менее приоритетных приложений к тем, где критично соблюдать SLA.
Мониторинг в YARN - это сочетание внутренних метрик RM, NM и AM, а также внешних инструментов мониторинга, которые собирают данные о загрузке узлов, использовании памяти, CPU-нагрузке, задержках запуска и успешности завершения задач. Важные параметры включают долю времени simple wait, average wait time на стадии ожидания ресурсов, коэффициент удачных запусков контейнеров, частоту heartbeat-сообщений и долю недоступных узлов. Наличие централизованных панелей мониторинга и журналирования позволяет администраторам оперативно выявлять аномалии и планировать профилактические меры.
Высокая доступность RM достигается через режим Active/Standby. При этом активный RM обслуживает запросы клиента, а резервный RM поддерживает актуальное состояние кластера, включая очереди и планировочные политики. В случае сбоя активного RM резервный становится активным без значимого простоя кластера. Этот подход требует синхронизации состояния через сервисы координации (обычно ZooKeeper) и осторожного управления конфигурациями, чтобы избежать рассинхронизации между Active и Standby экземплярами.
Безопасность и соответствие требованиям в YARN реализуются через интеграцию с Kerberos, использование безопасных токенов и контроль доступа на уровне очередей и приложений. Администраторы могут настраивать уровни доступа, кто может подавать приложения к конкретной очереди, запускать AM и просматривать мониторинг. В средах с чувствительными данными очень важна не только аутентификация, но и аудит действий и строгий контроль над темами журналирования.
Интеграция с экосистемой Hadoop предоставляет гибкие возможности для поддержки различных фреймворков: MapReduce v2, Tez, Spark и другие вычислительные движки запускаются через YARN и пользуются ресурсами RM и NM. Подобная архитектура позволяет совместно использовать ресурсы между различными фреймворками, минимизируя дублирование и упрощая эксплуатацию. Ваша задача как администратора - сохранить баланс между эффективностью использования ресурсов и сервисной устойчивостью, учитывая специфические требования каждого фреймворка и качество обслуживания, которое требуется бизнесу.
Key takeaways
- YARN разделяет ответственность за ресурсы между ResourceManager, NodeManager и ApplicationMaster, что обеспечивает масштабируемость и гибкость работы различных вычислительных фреймворков.
- Контейнеры служат базовой единицей распределения ресурсов и изоляции задач в кластере, управляемой через RM и NM.
- Планирование ресурсов зависит от выбранной политики очередей и типа планировщика (Capacity, Fair) с механизмами предвыброса для перераспределения ресурсов.
- ApplicationMaster управляет жизненным циклом конкретного приложения и координирует задачи внутри выделенных ресурсов.
- Мониторинг, безопасность и доступность RM (HA) критически важны для устойчивости кластера и соответствия SLA.
- Экосистемная интеграция с MapReduce, Tez и Spark реализуется через единое управление ресурсами YARN, что упрощает развертывание и эксплуатацию.
FAQ
- Чем отличается архитектура YARN от классического MapReduce в ранних версиях Hadoop?
- В классическом MapReduce архитектура была монолитной: JobTracker управлял работами, а TaskTracker выполнял задачи. YARN выделяет роль планирования и координации в ResourceManager и Robot Manager’е, а ApplicationMaster отвечает за выполнение конкретного приложения. Это позволяет запускать различные вычислительные фреймворки на одной платформе Hadoop, расширяя возможности кластера и повышая масштабируемость.
- Какие основные компоненты отвечает за планирование ресурсов в YARN?
- Основной компонент планирования - Scheduler внутри ResourceManager. Он принимает запросы AM на ресурсы и распределяет их по очередям в соответствии с политиками Capacity или Fair. В дополнение к scheduler существуют механизмы предвыброса для перераспределения ресурсов в условиях перегрузки.
- Как работает процесс регистрации ApplicationMaster в YARN?
- После подачи приложения RM создаёт контекст приложения и передает AM информацию о доступных ресурсах, политике очереди и состоянии кластера. AM регистрируется в RM, затем запрашивает ресурсы для своих контейнеров и запускает их через NM. AM поддерживает связь с RM, отправляя статусы выполнения и получая новые запросы на ресурсы.
- Какие сценарии используются для обслуживания нескольких фреймворков на одном кластере?
- В кластере одновременно запускают MR, Tez, Spark и другие фреймворки. Каждый фреймворк имеет свой AM, который координирует выполнение своих задач внутри выделенных контейнеров. RM, через политики очередей и планировщик, обеспечивает баланс между всеми приложениями и фреймворками, избегая монополизации ресурсов.
- Что включает в себя мониторинг YARN и какие инструменты применяются?
- Мониторинг включает сбор метрик использования CPU, памяти, задержек, количества контейнеров, времени ожидания ресурсов и статусов задач. Встроенные UI RM и NM, а также внешние инструменты мониторинга (например, Prometheus, Grafana) позволяют отслеживать эти показатели, настраивать оповещения и проводить диагностику в реальном времени.
- Как обеспечивается отказоустойчивость RM и каких механизмов нужно придерживаться при настройке HA?
- RM в режиме Active/Standby поддерживается через ZooKeeper и конфигурацию High Availability. При сбое активного RM резервный активируется и продолжает обработку запросов. Правильная настройка очередей, синхронизация конфигураций и совместная работа с менеджером очередей минимизирует простой кластера и сохраняет SLA.
- Какие принципы конфигурации важны для эксплуатации YARN?
- Важно обеспечить корректную настройку памяти и CPU для RM, NM и AM, определить подходящую политическую схему очередей, параметры планирования и предвыброса, а также настроить сбор и агрегацию логов. Безопасность должна включать Kerberos и управление токенами. Роли и доступы следует четко разграничить для предотвращения конфликтов и несанкционированного доступа.
- Какой подход к интеграции лучше выбрать между Capacity и Fair Scheduler?
- Выбор зависит от бизнес-целей: Capacity Scheduler обеспечивает гарантированное выделение ресурсов под направления, где критичны SLA и predictable behavior; Fair Scheduler - для равномерного доступа к ресурсам между активными приложениями, что особенно важно в мультиарендной среде. Можно комбинировать принципы через настройку очередей и политики, обеспечивая баланс между предсказуемостью и справедливостью.
- Какие типичные проблемы возникают в YARN и как их диагностировать?
- Классические проблемы включают перегрузку узлов, нехватку памяти для AM или задач, задержки при запуске контейнеров и падение AM при сбоях. Диагностика требует анализа логов NM и RM, изучения метрик очередей и состояния узлов, проверки конфигураций памяти и CPU, а также мониторинга процессов AM, которые могут уводить ресурсы или застревать в ожидании.
- Какие шаги эффективности рекомендуются для поддержки производительного кластера?
- Регулярная настройка и рефакторинг очередей, корректная настройка политик планирования, мониторинг и анализ метрик использования ресурсов, настройка предвыброса для перераспределения ресурсов, регулярное тестирование сценариев отказа и обновления конфигураций, обеспечение безопасности и аудит, а также поддержка совместимости между разными фреймворками через AM и соответствующие конфигурации.



