FairScheduler

FairScheduler — это подключаемый планировщик для Hadoop, который позволяет приложениям YARN совместно использовать ресурсы в больших кластерах таким образом, что все приложения получают в среднем равную долю ресурсов на некотором интервале времени.

Планировщик FairScheduler распределяет ресурсы между всеми запущенными приложениями так, что приложения, работающие недолго, завершают работу в разумное время, а приложения, работающие долго, не испытывают недостатка ресурсов. Он организует приложения в очереди и "справедливо" распределяет ресурсы между этими очередями.

По умолчанию FairScheduler принимает решения о справедливом планировании, используя в качестве ресурса только оперативную память и единственную очередь под названием default. Вы можете настроить его на учет одновременно памяти (mb — мегабайты) и процессоров (vcores — количество виртуальных процессоров). Приложения, поступающие в обработку, могут потребовать создания новых очередей, как это описано в секции Настройка очередей.

Пример распределения ресурсов

Допустим, есть две очереди:

  • sales — очередь продаж.

  • finance — очередь финансовых операций.

В очередь sales подается задание. Будучи единственным запущенным заданием, оно получит все ресурсы кластера.

Затем другое задание передается в очередь finance. В результате новое задание постепенно получает половину ресурсов кластера.

Таким образом, задания в обеих очередях будут иметь по 50% ресурсов. Теперь в очередь finance подается еще одно задание. Это приведет к тому, что половина ресурсов, выделенных для очереди finance, будет выделена для этого нового задания.

Два задания в очереди finance теперь будут разделять между собой ресурсы, выделенные для этой очереди (50% от общего объема ресурсов), в равных пропорциях. Единственное задание в очереди sales будет использовать все 50% ресурсов кластера, выделенных для этой очереди.

Поддержка иерархических очередей

FairScheduler поддерживает иерархические очереди. Очередь является иерархической, если внутри этой очереди можно создавать дочерние очереди.

Существует корневая очередь root, которая включает все остальные очереди. Однако префикс "root" можно опускать в полном названии очереди при настройках. Планировщик распределяет доступные ресурсы между дочерними очередями корневой очереди (верхний уровень) с использованием концепции "справедливого" планирования. Затем он распределяет таким же образом ресурсы очередей верхнего уровня между их дочерними очередями следующего уровня и так далее вниз по дереву иерархии.

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

Чтобы использовать FairScheduler в YARN, необходимо начать с назначения соответствующего класса планировщика в файле yarn-site.xml:

<property>
  <name>yarn.resourcemanager.scheduler.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>

Настройка очередей

Для настройки очередей используйте следующие XML-элементы в конфигурационном файле fair-scheduler.xml:

  • <queue>. Представляет очередь. Подобные элементы встраивают друг в друга для образования дерева очередей. Некоторые из наиболее важных свойств этого элемента перечислены ниже:

    • minResources. Указывает минимально необходимое количество ресурсов для очереди (X mb, Y vcores). Если это требование не соблюдено, планировщик будет предоставлять освобождающиеся ресурсы для этой очереди прежде, чем для других очередей того же родителя.

    • maxResources. Указывает максимальный объем ресурсов, который можно выделять для очереди, в абсолютных значениях (X mb, Y vcores) или в процентах от ресурсов кластера (X% памяти, Y% CPU).

    • weight. Влияет на пропорцию распределения ресурсов кластера между очередями. Значение веса очереди по умолчанию равно 1. Если вес очереди равен 2, то эта очередь должна получать примерно в два раза больше ресурсов, чем очередь с весом по умолчанию.

    • schedulingPolicy. Позволяет установить политику планирования для любой очереди. Можно назначать один из объектов, расширяющих класс org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy, то есть: fifo, fair, drf или другой. Значение по умолчанию — fair.

  • <defaultQueueSchedulingPolicy>. Устанавливает политику планирования по умолчанию для очередей. Значение по умолчанию — fair. Этот элемент переопределяется параметром schedulingPolicy в настройках очереди.

  • <queueMaxAppsDefault>. Устанавливает предельно допустимое количество запущенных приложений по умолчанию для очередей. Этот элемент переопределяется параметром maxRunningApps в настройках очереди.

  • <queuePlacementPolicy>. Содержит список правил (представленных XML-элементами), которые указывают планировщику, как размещать входящие приложения в очередях. Правила применяются в том порядке, в котором они перечислены. Планировщик выполняет первое подходящее правило. Каждое правило имеет атрибут create, который указывает, может ли планировщик создать новую очередь. По умолчанию create имеет значение true. Если значение установлено в false и правило помещает приложение в очередь, которая не настроена в файле распределения, планировщик переходит к следующему правилу. Возможные правила перечислены ниже:

    • specified. Приложение помещается в запрашиваемую очередь.

    • user. Приложение помещается в очередь с именем пользователя, который добавил данное приложение.

    • primaryGroup. Приложение помещается в очередь с именем основной группы пользователя, который добавил это приложение.

    • secondaryGroupExistingQueue. Приложение помещается в очередь с именем, которое соответствует дополнительной группе пользователя, добавившего это приложение.

    • nestedUserQueue. Приложение помещается в очередь с именем пользователя под очередью, предложенной вложенным правилом. Правило этого типа должно иметь вложенное правило, определяющее родительскую очередь.

    • default. Приложение помещается в очередь, указанную в атрибуте queue правила по умолчанию. Если атрибут queue не указан, приложение помещается в очередь root.default.

    • reject. Приложение отклоняется.

ПРИМЕЧАНИЕ
Вы можете изменять параметры планировщика (например, минимальные доли, лимиты, вес, preemtion тайм-ауты, политики планирования и прочее) на лету посредством редактирования файла распределения. В таком случае не нужно выполнять команду Reload Scheduler config — планировщик автоматически перезагрзит файл через 10-15 секунд после изменения файла.

Пример конфигурации очереди

Пусть есть две очереди верхнего уровня (нисходящие от корневой):

  • sales — очередь продаж.

  • finance — очередь по финансовым операциям.

В очереди sales есть две дочерние очереди:

  • apac

  • emea

Очереди могут быть настроены следующим образом:

<allocations>
  <queue name="sales">
      <minResources>10000 mb,0vcores</minResources>
      <maxResources>50000 mb,0vcores</maxResources>
      <weight>2.0</weight>
      <schedulingPolicy>fifo</schedulingPolicy>
      <queue name="emea" />
      <queue name="apac" />
  </queue>
  <queue name="finance">
      <minResources>10000 mb,0vcores</minResources>
      <maxResources>70000 mb,0vcores</maxResources>
      <weight>3.0</weight>
      <schedulingPolicy>fair</schedulingPolicy>
  </queue>
  <queuePlacementPolicy>
      <rule name="specified"   />
      <rule name="primaryGroup" create="false" />
      <rule name="default" queue="finance" />
  </queuePlacementPolicy>
</allocations>
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней