Airflow:如何指定资源池的定量使用?

Tem*_*Rex 9 resources pool memory-limit luigi airflow

我正在寻找几个开源工作流程调度程序,用于具有异构RAM使用的DAG作业.调度程序不仅应该调度少于最大线程数,还应该将所有并发任务的RAM总量保持在可用内存之下.

在这个Luigi Q&A中,有人解释说

您可以设置配置中可用资源的数量,然后设置任务消耗的资源数量作为任务的属性.这将限制您一次运行n该任务.

在配置中:

[resources]
api=1
Run Code Online (Sandbox Code Playgroud)

在任务代码中:

resources = {"api": 1}
Run Code Online (Sandbox Code Playgroud)

对于Airflow,我无法在其文档中找到相同的功能.最好的方法是在资源池中指定多个可用插槽,并指定任务实例使用资源池中的单个插槽.但是,似乎无法指定任务实例在池中使用多个插槽.

问题:专门针对Airflow,如何指定任务实例的定量资源使用?

bar*_*ras 3

假设您正在使用CeleryExecutor,那么从 Airflow 版本 1.9.0 开始,您可以管理 Celery 的任务并发性。这并不完全是您一直在询问的内存管理,而是执行任务的并发工作线程的数量。

调用可调整参数CELERYD_CONCURRENCY这里很好地解释了如何在 Airflow 中管理 celery 相关配置。

[编辑]

实际上,Pools也可以用来限制并发。假设您想要限制资源消耗task_id,以便仅同时运行 2 个实例。您唯一需要做的就是:

  • 创建池(在 UI 中:Admin-> Pools)为其指定名称,例如my_pool并在字段中定义任务的并发性Slots(在本例中2

  • 当实例化您的Operator将执行此操作时task_id,传递定义的池名称(pool=my_pool