Apache Hadoop YARN
Apache Hadoop YARN (Yet Another Resource Negotiator) — это компонент экосистемы Apache Hadoop, отвечающий за управление ресурсами кластера и планирование выполнения заданий. YARN представляет собой распределённую операционную систему для приложений, работающих на больших объёмах данных, и позволяет разделить функции управления ресурсами и обработки данных, которые в ранних версиях Hadoop выполнялись централизованно (JobTracker и TaskTracker). YARN выступает в роли ядра, на котором могут выполняться различные фреймворки обработки данных — MapReduce, Apache Spark, Apache Flink, Apache Tez и другие.
История
YARN был разработан как ответ на ограничения архитектуры Hadoop 1.x, где JobTracker совмещал функции управления ресурсами, мониторинга и планирования заданий. Это создавало узкое место: при большом количестве задач JobTracker становился перегруженным, а кластер мог поддерживать только одну версию MapReduce. В 2011 году инженеры Yahoo! (организация, зарегистрированная в США) и Hortonworks (компания, зарегистрированная в США) предложили новую архитектуру, которая была принята сообществом Apache.
YARN был официально включён в состав Apache Hadoop версии 2.0, выпущенной в 2012 году. С этого момента Hadoop перестал быть исключительно реализацией MapReduce и превратился в платформу общего назначения для распределённых вычислений. В 2013 году была выпущена стабильная версия Hadoop 2.2.0, в которой YARN стал стандартным компонентом. В последующих версиях (Hadoop 3.x) YARN был доработан: появилась поддержка контейнеров Docker, улучшено планирование ресурсов (например, поддержка GPU и FPGA), а также реализованы механизмы для работы с долгоживущими приложениями.
Архитектура
YARN состоит из трёх основных компонентов: ResourceManager, NodeManager и ApplicationMaster. Каждый из них выполняет строго определённые функции, что обеспечивает модульность и масштабируемость системы.
ResourceManager
ResourceManager (RM) — центральный компонент, отвечающий за глобальное распределение ресурсов (память, процессорное время, дисковое пространство) между всеми приложениями, работающими в кластере. RM принимает решения на основе политик планирования (schedulers), таких как Capacity Scheduler или Fair Scheduler. ResourceManager состоит из двух подсистем:
- Scheduler — отвечает за выделение ресурсов приложениям в соответствии с заданными политиками. Он не отслеживает состояние выполнения задач, а лишь распределяет ресурсы (контейнеры) по запросам.
- ApplicationsManager — управляет жизненным циклом приложений: принимает запросы на запуск, назначает ApplicationMaster для каждого приложения и отслеживает его состояние.
ResourceManager является единственной точкой отказа в кластере. Для повышения отказоустойчивости в Hadoop 2.4+ была реализована поддержка высокой доступности (High Availability, HA) для RM через ZooKeeper.
NodeManager
NodeManager (NM) — агент, работающий на каждом узле кластера. Он отвечает за локальное управление ресурсами: мониторинг использования памяти, CPU, диска и сети, а также за запуск и остановку контейнеров — изолированных сред выполнения задач. NodeManager периодически отправляет отчёты ResourceManager о текущем состоянии узла и доступных ресурсах.
Каждый контейнер представляет собой набор ресурсов (например, 2 ГБ RAM, 1 ядро CPU), выделенных для выполнения одной задачи. NodeManager управляет жизненным циклом контейнеров: создаёт их, запускает процессы, отслеживает выполнение и освобождает ресурсы после завершения.
ApplicationMaster
ApplicationMaster (AM) — это приложение, создаваемое для каждого пользовательского задания. Оно отвечает за координацию выполнения задачи: запрашивает у ResourceManager необходимые ресурсы (контейнеры), распределяет их между подзадачами и контролирует выполнение. ApplicationMaster может быть написан на любом языке, поддерживающем протокол YARN, и работает в одном из контейнеров кластера.
После завершения задания ApplicationMaster отправляет отчёт ResourceManager и завершает свою работу. Для долгоживущих приложений (например, потоковая обработка) AM может оставаться активным до явного завершения.
Процесс выполнения задания
Процесс запуска задания в YARN можно описать следующими шагами:
- Клиент (например, пользовательская программа или утилита
yarn) отправляет запрос на выполнение задания ResourceManager. - ResourceManager создаёт экземпляр ApplicationMaster и запускает его в одном из контейнеров, управляемых NodeManager.
- ApplicationMaster регистрируется в ResourceManager и запрашивает необходимое количество контейнеров для выполнения подзадач.
- ResourceManager выделяет контейнеры на узлах, где доступны ресурсы, и сообщает ApplicationMaster их координаты.
- ApplicationMaster отправляет команды NodeManager на запуск задач в выделенных контейнерах.
- NodeManager запускает процессы, выполняющие задачи, и отслеживает их состояние.
- После завершения всех подзадач ApplicationMaster отправляет ResourceManager отчёт и освобождает ресурсы.
Планировщики ресурсов
YARN поддерживает несколько встроенных планировщиков, которые определяют, как распределяются ресурсы между приложениями:
- FIFO Scheduler — простейший планировщик, работающий по принципу очереди: задания выполняются в порядке поступления. Неэффективен при одновременной работе нескольких пользователей.
- Capacity Scheduler — разделяет кластер на логические очереди, каждая из которых имеет гарантированную долю ресурсов. Позволяет изолировать нагрузки разных групп пользователей.
- Fair Scheduler — стремится равномерно распределять ресурсы между всеми запущенными приложениями, используя механизмы вытеснения (preemption) для соблюдения справедливости.
Планировщики настраиваются через XML-конфигурации и могут быть заменены пользовательскими реализациями.
Применение
YARN используется в качестве основы для выполнения широкого спектра задач обработки больших данных:
- Пакетная обработка — традиционный MapReduce, Apache Hive (организация, разрабатывающая открытое ПО), Apache Pig.
- Потоковая обработка — Apache Storm, Apache Flink, Apache Spark Streaming.
- Интерактивные запросы — Apache Impala, Presto.
- Машинное обучение — Apache Mahout, TensorFlow на YARN.
- Графовые вычисления — Apache Giraph, Apache GraphX.
YARN также используется в коммерческих продуктах, таких как Cloudera CDH и Hortonworks Data Platform (HDP), а также в облачных сервисах (Amazon EMR, Google Cloud Dataproc).
Преимущества и недостатки
Преимущества:
- Масштабируемость: кластеры могут содержать тысячи узлов и десятки тысяч задач.
- Многозадачность: одновременное выполнение разных фреймворков (MapReduce, Spark, Flink) на одном кластере.
- Гибкость: поддержка различных моделей программирования и языков.
- Отказоустойчивость: автоматическое восстановление после сбоев через ZooKeeper.
Недостатки:
- Сложность настройки и администрирования: требует глубоких знаний конфигураций и мониторинга.
- Задержки при запуске: создание контейнеров и инициализация ApplicationMaster занимают время (от секунд до минут).
- Ограниченная поддержка долгоживущих приложений: хотя YARN поддерживает их, архитектура изначально ориентирована на пакетную обработку.
Интересные факты
- YARN был разработан как часть проекта Apache Hadoop, который изначально создавался в компании Yahoo! (организация, зарегистрированная в США) под руководством Дага Каттинга.
- В 2014 году YARN был признан одним из ключевых компонентов для развития экосистемы больших данных, позволив Hadoop выйти за рамки только MapReduce.
- В Hadoop 3.x была добавлена поддержка контейнеров Docker, что упростило изоляцию задач и развёртывание пользовательских сред.
- YARN поддерживает механизм «вытеснения» (preemption), который позволяет планировщикам перераспределять ресурсы от менее приоритетных задач к более важным.
Источники
- Apache Hadoop YARN Documentation (официальная документация проекта Apache Hadoop)
- «Apache Hadoop YARN: Yet Another Resource Negotiator» — статья В. К. Вадима и соавторов (2013)
- «Hadoop: The Definitive Guide» — Том Уайт (O'Reilly Media, 4-е издание, 2015)
- «YARN Architecture and Internals» — блог Hortonworks (организация, зарегистрированная в США)
- «Apache Hadoop YARN: Concepts and Applications» — книга Аруна Мурти и соавторов (2014)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →