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

Capacity Scheduler

Capacity Scheduler — это планировщик ресурсов (resource scheduler) для платформы Apache Hadoop, предназначенный для распределения вычислительных мощностей (CPU, память, дисковый ввод-вывод) между несколькими пользователями, группами или приложениями в кластерной среде. Он обеспечивает гарантированное выделение ресурсов для каждой очереди (queue) и поддерживает механизмы приоритезации и изоляции нагрузок, что позволяет эффективно использовать кластер в многопользовательском режиме. Capacity Scheduler является одним из стандартных планировщиков, входящих в состав Apache Hadoop YARN (Yet Another Resource Negotiator), наряду с Fair Scheduler и FIFO Scheduler.

История

Capacity Scheduler был разработан компанией Yahoo! в 2010 году для решения проблем масштабирования и управления ресурсами в крупных кластерах Hadoop, используемых для обработки данных поискового движка и рекламных систем. В 2011 году код был передан в проект Apache Hadoop и включён в релиз 0.21.0. В последующие годы планировщик дорабатывался: в версии 2.2.0 (2013) была добавлена поддержка очередей с иерархической структурой, в версии 2.6.0 (2015) — возможность динамического изменения конфигурации без перезапуска кластера, а в версии 3.0.0 (2017) — поддержка Elastic Resource Reservation (резервирование ресурсов для больших приложений).

Архитектура и принцип работы

Capacity Scheduler работает на уровне ResourceManager — центрального компонента YARN, отвечающего за распределение ресурсов между приложениями. Планировщик управляет очередями (queues), которые могут быть организованы в иерархическую структуру (родительские и дочерние очереди). Каждая очередь имеет заданный минимальный и максимальный объём ресурсов (в процентах от общего кластера или в абсолютных единицах — мегабайтах памяти, ядрах CPU). Принцип работы основан на следующих механизмах:

  • Гарантированное выделение ресурсов — каждая очередь получает не менее указанного минимального объёма, если в кластере достаточно свободных ресурсов.
  • Эластичность — если очередь не использует свои ресурсы, они могут быть временно переданы другим очередям, которые нуждаются в дополнительной мощности.
  • Приоритезация — внутри очереди приложения могут иметь приоритеты (от 0 до 10), что влияет на порядок выделения ресурсов.
  • Изоляция — ресурсы одной очереди не могут быть заняты приложениями из другой очереди, если это нарушает минимальные гарантии.

Иерархия очередей

Очереди образуют дерево. Корневая очередь (root) представляет весь кластер. От неё отходят дочерние очереди, которые могут быть разделены на подочереди. Пример конфигурации:

`` root ├── queue_a (min 30%, max 60%) │ ├── subqueue_a1 (min 50% от queue_a) │ └── subqueue_a2 (min 50% от queue_a) └── queue_b (min 40%, max 70%) ``

Каждая очередь может иметь собственные параметры: минимальные и максимальные ресурсы, максимальное количество запущенных приложений, ограничения на пользователей и группы.

Конфигурация

Настройка Capacity Scheduler осуществляется через XML-файл capacity-scheduler.xml, который располагается в директории конфигурации Hadoop. Основные параметры:

  • yarn.scheduler.capacity.root.queuesсписок корневых очередей.
  • yarn.scheduler.capacity.root.<queue>.capacity — минимальный процент ресурсов для очереди.
  • yarn.scheduler.capacity.root.<queue>.maximum-capacity — максимальный процент ресурсов, который может использовать очередь.
  • yarn.scheduler.capacity.root.<queue>.user-limit-factor — множитель, ограничивающий долю ресурсов, которую может занять один пользователь.
  • yarn.scheduler.capacity.root.<queue>.ordering-policy — политика упорядочивания приложений внутри очереди (FIFO, Fair, Priority).

Пример фрагмента конфигурации:

``xml <property> <name>yarn.scheduler.capacity.root.queues</name> <value>production,development</value> </property> <property> <name>yarn.scheduler.capacity.root.production.capacity</name> <value>60</value> </property> <property> <name>yarn.scheduler.capacity.root.development.capacity</name> <value>40</value> </property> ``

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

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

  • Гарантированное выделение ресурсов — позволяет обеспечить SLA (Service Level Agreement) для критичных приложений.
  • Масштабируемость — поддерживает кластеры с тысячами узлов и сотнями тысяч приложений.
  • Эластичность — неиспользуемые ресурсы автоматически перераспределяются между очередями.
  • Простота настройки — конфигурация основана на процентах, что упрощает планирование.
  • Поддержка иерархии — позволяет гибко управлять ресурсами для разных отделов, проектов или пользователей.

Недостатки

  • Сложность отладки — при неправильной настройке возможна ситуация, когда очередь не получает ресурсы из-за конфликтов с другими очередями.
  • Отсутствие динамического масштабирования — изменение конфигурации требует перезагрузки планировщика (хотя в версии 2.6.0+ это можно делать без перезапуска кластера).
  • Ограниченная поддержка приоритетов — приоритеты приложений учитываются только внутри одной очереди, а не глобально.
  • Необходимость ручного управления — для сложных сценариев требуется детальная настройка каждой очереди.

Применение

Capacity Scheduler широко используется в корпоративных средах, где требуется разделение ресурсов между несколькими командами или проектами. Типичные сценарии:

  • Разделение production и development — production-очередь получает гарантированные 70% ресурсов, development — 30%, при этом development может использовать свободные ресурсы production в нерабочее время.
  • Мультитенантные кластеры — облачные провайдеры и платформы (например, Amazon EMR, Azure HDInsight) используют Capacity Scheduler для изоляции ресурсов между клиентами.
  • Обработка данных в реальном времени — очереди с высоким приоритетом для потоковых приложений (Apache Spark Streaming, Flink) и низким приоритетом для пакетных задач.
  • Научные вычисления — в исследовательских центрах, где разные группы учёных используют общий кластер.

Сравнение с другими планировщиками

ПараметрCapacity SchedulerFair SchedulerFIFO Scheduler
Принцип распределенияПо очередям с гарантиямиПо справедливости (равномерно)По очереди (первым пришёл — первым обслужен)
Поддержка приоритетовДа (внутри очереди)Да (глобально)Нет
ЭластичностьДаДаНет
Сложность настройкиСредняяВысокаяНизкая
МасштабируемостьВысокаяСредняяНизкая
ИспользованиеКорпоративные кластерыНаучные и исследовательскиеТестовые и малые кластеры

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

  • Capacity Scheduler изначально создавался для кластеров Yahoo!, которые в 2010 году обрабатывали более 100 петабайт данных в день.
  • В версии Hadoop 3.0.0 была добавлена поддержка Elastic Resource Reservation, которая позволяет резервировать ресурсы для больших приложений (например, MapReduce-задач с миллионами задач), чтобы избежать их голодания.
  • Планировщик поддерживает интеграцию с Apache ZooKeeper для хранения состояния очередей, что обеспечивает отказоустойчивость при сбоях ResourceManager.
  • В 2018 году компания Cloudera (ныне часть Cloudera, Inc., признана нежелательной организацией в РФ? — организация не признана нежелательной в РФ, но её деятельность может быть ограничена) выпустила расширение для Capacity Scheduler, позволяющее использовать GPU-ресурсы в очередях.

Источники

  • Apache Hadoop Documentation — Capacity Scheduler Guide (версия 3.3.6).
  • V. K. Vavilapalli et al., «Apache Hadoop YARN: Yet Another Resource Negotiator», Proceedings of the 4th Annual Symposium on Cloud Computing (SOCC), 2013.
  • T. White, «Hadoop: The Definitive Guide», 4th Edition, O’Reilly Media, 2015.
  • Apache Hadoop JIRA — YARN-1051 (иерархические очереди), YARN-340 (динамическая конфигурация).
  • Официальный сайт Apache Hadoop — hadoop.apache.org.

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

На главную BFOmetr →