控制特定任务的dag气流任务并行性?

时间:2019-12-19 00:26:50

标签: airflow

是否有一种方法可以控制气流障碍中特定任务的并行性?例如。说我有一个模糊的定义,例如...

for dataset in list_of_datasets:
    # some simple operation
    task_1 = BashOperator(task_id=f'task_1_{dataset.name}', ...)
    # load intensive operation
    task_2 = BashOperator()
    # another simple operation
    task_3 = BashOperator()

    task_1 >> task_2 >> task_3

有没有一种方法可以使task_1可以在dag实例中运行5种同类任务,而在task实例中可以仅运行2个task_2实例(这也意味着如果有2个实例,则可以运行) task_2已经在运行,那么task_1只有3个实例可以运行)?有其他通用方法可以解决这种需求(我想管道必须经常提出这种要求)?

1 个答案:

答案 0 :(得分:0)

从有关Apache airflow电子邮件列表的讨论中...

您可以使用池(https://airflow.apache.org/docs/stable/concepts.html#pools)来限制给定池可以并行运行多少个任务。

因此,您可以创建具有任务数限制的命名“池”(通过Web服务器管理菜单) enter image description here 然后在创建任务时将这些任务分配给dag定义文件中的那些池

for dataset in datasets:
high_load_task = BashOperator(
            task_id='high_load_task_%s' % dataset["id"],
            bash_command='some_command',
            pool='example_pool',
            trigger_rule=TriggerRule.ALL_SUCCESS,
            dag=dag)

还...

  

还有另一种限制任务并行性的方法-适用于例如您拥有具有不同功能的不同类型机器(例如具有/不具有GPU)的情况。您可以在任务和执行任务的实际计算机之间定义一些关联-在Celery执行器中,您可以在celery配置中定义队列,您可以将任务分配给其中一个队列。然后,您可以为队列中的所有计算机定义多个工作器/插槽,并且实际上,您还可以通过以下方式限制任务的并行性:https://airflow.apache.org/docs/stable/concepts.html#queues