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

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

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