Открыть сервис

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 состоит из двух подсистем:

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 можно описать следующими шагами:

  1. Клиент (например, пользовательская программа или утилита yarn) отправляет запрос на выполнение задания ResourceManager.
  2. ResourceManager создаёт экземпляр ApplicationMaster и запускает его в одном из контейнеров, управляемых NodeManager.
  3. ApplicationMaster регистрируется в ResourceManager и запрашивает необходимое количество контейнеров для выполнения подзадач.
  4. ResourceManager выделяет контейнеры на узлах, где доступны ресурсы, и сообщает ApplicationMaster их координаты.
  5. ApplicationMaster отправляет команды NodeManager на запуск задач в выделенных контейнерах.
  6. NodeManager запускает процессы, выполняющие задачи, и отслеживает их состояние.
  7. После завершения всех подзадач ApplicationMaster отправляет ResourceManager отчёт и освобождает ресурсы.

Планировщики ресурсов

YARN поддерживает несколько встроенных планировщиков, которые определяют, как распределяются ресурсы между приложениями:

Планировщики настраиваются через XML-конфигурации и могут быть заменены пользовательскими реализациями.

Применение

YARN используется в качестве основы для выполнения широкого спектра задач обработки больших данных:

YARN также используется в коммерческих продуктах, таких как Cloudera CDH и Hortonworks Data Platform (HDP), а также в облачных сервисах (Amazon EMR, Google Cloud Dataproc).

Преимущества и недостатки

Преимущества:

Недостатки:

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →