Воздушный поток: как указать количественное использование пула ресурсов? - PullRequest
0 голосов
/ 02 сентября 2018

Я смотрю на несколько планировщиков рабочих процессов с открытым исходным кодом для DAG заданий с разнородным использованием оперативной памяти. Планировщик должен не только планировать менее максимального числа потоков, но также должен поддерживать общий объем оперативной памяти всех одновременных задач ниже доступной памяти.

В этом Луиджи Q & A было объяснено, что

Вы можете установить, сколько ресурсов доступно в конфигурации, и то, сколько ресурсов задача использует в качестве свойства на задача. Это тогда ограничит вас выполнением n этой задачи на время.

в конфигурации:

[resources]
api=1

в коде для Задания:

resources = {"api": 1}

Что касается Airflow, мне не удалось найти такую ​​же функциональность в его документах. Лучшее, что кажется возможным, - это указать количество доступных слотов в пуле ресурсов , а также указать, что экземпляр задачи использует один слот в пуле ресурсов. Однако, похоже, нет способа указать, что экземпляр задачи использует более одного слота в пуле.

Вопрос : специально для Airflow, как я могу указать количественное использование ресурса экземпляра задачи?

1 Ответ

0 голосов
/ 12 сентября 2018

Если вы используете CeleryExecutor, то, начиная с версии 1.9.0 airflow, вы можете управлять параллелизмом задач Celery. Это не совсем управление памятью, о котором вы спрашивали, а количество одновременно работающих потоков, выполняющих задачи.

Настраиваемый параметр называется CELERYD_CONCURRENCY, а здесь очень хорошо объясняет, как управлять конфигурацией, связанной с сельдереем, в Airflow.

[редактировать]

На самом деле, Pools также может использоваться для ограничения параллелизма. Допустим, вы хотите ограничить потребление ресурсов task_id, чтобы одновременно запускались только 2 экземпляра. Единственное, что вам нужно сделать, это:

  • создать пул (в пользовательском интерфейсе: Admin -> Pools) присвоить ему имя, например, my_pool и определите параллелизм задачи в поле Slots (в данном случае 2)

  • при создании экземпляра Operator, который будет выполнять это task_id, передать определенное имя пула (pool=my_pool)

...