Airflow 一个有很多很多子数据的工作流可以执行吗?

Airflow 一个有很多很多子数据的工作流可以执行吗?,airflow,Airflow,我有一个工作流,它涉及许多SubDagOperator实例,其中的任务在循环中生成。该图案由以下玩具dag文件说明: from datetime import datetime, timedelta from airflow.models import DAG from airflow.operators.dummy_operator import DummyOperator from airflow.operators.subdag_operator import SubDagOperator

我有一个工作流,它涉及许多SubDagOperator实例,其中的任务在循环中生成。该图案由以下玩具dag文件说明:

from datetime import datetime, timedelta
from airflow.models import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.subdag_operator import SubDagOperator

dag = DAG(
    'subdaggy-2',
    schedule_interval=None,
    start_date=datetime(2017,1,1)
)

def make_sub_dag(parent_dag, N):
    dag = DAG(
        '%s.task_%d' % (parent_dag.dag_id, N),
        schedule_interval=parent_dag.schedule_interval,
        start_date=parent_dag.start_date
        )
    DummyOperator(task_id='task1', dag=dag) >> DummyOperator(task_id='task2', dag=dag)
    return dag

downstream_task = DummyOperator(task_id='downstream', dag=dag)
for N in range(20):
    SubDagOperator(
        dag=dag,
        task_id='task_%d' % N,
        subdag=make_sub_dag(dag, N)
        ) >> downstream_task
我发现这是一种方便的任务组织方式,特别是因为它有助于保持顶级DAG的整洁,尤其是如果子DAG本身包含更多任务(即十个,而不仅仅是几个任务)

问题是,随着子DAG数量(本例中为20)的增加,这种方法的伸缩性不太好。我发现,当在整个工作流中创建的DAG对象总数超过200个时(这在生产工作流中很容易发生,特别是当该模式出现多次时),事情就会停止


所以问题是:有没有一种方法可以这样组织任务(许多类似的子DAG),可以扩展到数百或数千个子DAG?一些分析表明,该进程在DAG对象构造函数中花费了大量时间。也许有一种方法可以避免为每个子DAG操作符实例化一个新的DAG对象?

好吧,似乎这个问题至少有很大一部分是由于DAG构造函数的成本,而DAG构造函数的成本又很大一部分是由于
inspect.stack()
的成本。我提出了一个简单的方法,用一个更便宜的方法来代替它,而且似乎确实有了改进——一个有几千个子数据包的流,以前无法为我加载,现在加载了。我们将看看这是否可行。

我们对subdag任务(100/1000/10000)进行了一些缩放测试,发现它很快就被气流调度器的设计方式破坏了。我建议在完成几十项任务时,使用vanilla
rabbitmq
/
芹菜
/…对任务进行排队。是的,也许这不是airflow考虑的用例?但在我看来,支持集群上的分布式处理(即CeleryExecutor)与支持大量任务是相辅相成的。是的,我同意我们最初的想法。我们发现,当有大量任务时,DAG被迭代时的心跳过程超时。也许你可以实现一些基本上只是发出大量任务的
CeleryOperator
(我们尝试了这个,但最终推出了我们自己的DAG调度工具来支持这个特定的用例…)我有一个DAG,有300多个子DAG操作符,总共1000个任务。我也看到过日程安排有时会慢下来/塞车,但事情最终还是解决了。UI中的图形/树视图的加载速度明显较慢,并且不总是可用的。我已经明确注意到,在web UI中影响最大(比如说,与简单地用“python some dag.py”解析文件相比)。很高兴知道大dag最终可以运行,但这仍然是不幸的,因为WebUI是airflow最吸引人的特性之一。