我正在使用气流编排一些python脚本。我有一个“主要” dag,从中可以运行几个subdag。我的主要任务应该按照以下概述运行:
通过使用以下几行,我已经设法在主菜单中找到此结构:
etl_internal_sub_dag1 >> etl_internal_sub_dag2 >> etl_internal_sub_dag3
etl_internal_sub_dag3 >> etl_adzuna_sub_dag
etl_internal_sub_dag3 >> etl_adwords_sub_dag
etl_internal_sub_dag3 >> etl_facebook_sub_dag
etl_internal_sub_dag3 >> etl_pagespeed_sub_dag
etl_adzuna_sub_dag >> etl_combine_sub_dag
etl_adwords_sub_dag >> etl_combine_sub_dag
etl_facebook_sub_dag >> etl_combine_sub_dag
etl_pagespeed_sub_dag >> etl_combine_sub_dag
我想让气流进行的工作是先运行etl_internal_sub_dag1
,然后运行etl_internal_sub_dag2
,然后运行etl_internal_sub_dag3
。 etl_internal_sub_dag3
完成后,我希望etl_adzuna_sub_dag
,etl_adwords_sub_dag
,etl_facebook_sub_dag
和etl_pagespeed_sub_dag
并行运行。最后,当最后四个脚本完成时,我希望运行etl_combine_sub_dag
。
但是,当我运行主dag时,etl_adzuna_sub_dag
,etl_adwords_sub_dag
,etl_facebook_sub_dag
和etl_pagespeed_sub_dag
会一个接一个地运行,而不是并行运行。
问题::如何确保脚本etl_adzuna_sub_dag
,etl_adwords_sub_dag
,etl_facebook_sub_dag
和etl_pagespeed_sub_dag
并行运行? / p>
编辑:我的default_args
和DAG
如下:
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': start_date,
'end_date': end_date,
'email': ['myname@gmail.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 0,
'retry_delay': timedelta(minutes=5),
}
DAG_NAME = 'main_dag'
dag = DAG(DAG_NAME, default_args=default_args, catchup = False)
答案 0 :(得分:5)
您将需要使用LocalExecutor
。
检查您的配置(airflow.cfg
),您可能正在使用SequentialExectuor
来串行执行任务。
Airflow使用后端数据库存储元数据。检查您的airflow.cfg
文件并查找executor
关键字。默认情况下,Airflow使用SequentialExecutor
,无论如何,它将顺序执行任务。因此,要允许Airflow并行运行任务,您需要在Postges或MySQL中创建一个数据库,并在airflow.cfg
(sql_alchemy_conn
参数)中对其进行配置,然后在{ {1}},然后运行LocalExecutor
。
请注意,要使用airflow.cfg
,您需要使用Postgres或MySQL而不是SQLite作为后端数据库。
更多信息:https://airflow.incubator.apache.org/howto/initialize-database.html
如果您想对Airflow进行真实的测试,则应考虑设置真实的数据库后端并切换到LocalExecutor。由于Airflow是使用强大的SqlAlchemy库构建的,可与其元数据进行交互,因此您应该能够将任何支持的数据库后端用作SqlAlchemy后端。我们建议使用MySQL或Postgres。