Tem*_*Rex 9 resources pool memory-limit luigi airflow
我正在寻找几个开源工作流程调度程序,用于具有异构RAM使用的DAG作业.调度程序不仅应该调度少于最大线程数,还应该将所有并发任务的RAM总量保持在可用内存之下.
在这个Luigi Q&A中,有人解释说
您可以设置配置中可用资源的数量,然后设置任务消耗的资源数量作为任务的属性.这将限制您一次运行
n
该任务.在配置中:
Run Code Online (Sandbox Code Playgroud)[resources] api=1
在任务代码中:
Run Code Online (Sandbox Code Playgroud)resources = {"api": 1}
对于Airflow,我无法在其文档中找到相同的功能.最好的方法是在资源池中指定多个可用插槽,并指定任务实例使用资源池中的单个插槽.但是,似乎无法指定任务实例在池中使用多个插槽.
问题:专门针对Airflow,如何指定任务实例的定量资源使用?
假设您正在使用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
)