Воздушный поток: как указать количественное использование пула ресурсов?

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

В этом Luigi Q&A объяснялось, что

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

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

[resources]
api=1

в коде для задачи:

resources = {"api": 1}

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

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


person TemplateRex    schedule 02.09.2018    source источник
comment
Вы можете ограничить параллелизм, если ваш воздушный поток использует Celery в качестве исполнителя. В частности, stackoverflow.com/questions/44979811/ содержит некоторые сведения об этом, а параметр, который вы ищете, — CELERYD_CONCURRENCY.   -  person bartgras    schedule 07.09.2018
comment
@bartgras рассмотрите возможность превращения вашего комментария в ответ   -  person TemplateRex    schedule 12.09.2018


Ответы (1)


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

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

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

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

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

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

person bartgras    schedule 12.09.2018
comment
может ли соединение поддерживаться на рабочем узле с использованием пула. (В принципе, не нужно повторно создавать новое соединение в каждой задаче на рабочем узле) - person user13744439; 05.07.2021