我们使用的是Airflow:1.10.0,经过一些分析,为什么我们的某些ETL流程花了这么长时间,我们发现子数据使用SequentialExecutor
代替了BaseExecutor
,或者当我们配置CeleryExecutor
。
我想知道这是错误还是Airflow的预期行为。具有并行执行任务的功能没有任何意义,但是在某些特定类型的任务中,此功能会丢失。
答案 0 :(得分:6)
在subdags中使用SequentialExecutor是一种典型的模式,它的思想是您经常执行许多类似的相关任务,而不必一定要增加添加到celery中的队列等的开销。 Airflow文档中有关“子提示”的“其他提示”部分:https://airflow.apache.org/concepts.html#subdags
默认情况下,子子级设置为使用顺序执行器(请参见:https://github.com/apache/incubator-airflow/blob/v1-10-stable/airflow/operators/subdag_operator.py#L38),但是您可以更改它。
要使用celery执行器,请在subdag创建中添加以下内容:
from airflow.executors.celery_executor import CeleryExecutor
mysubdag = SubDagOperator(
executor=CeleryExecutor()
...
)
答案 1 :(得分:0)
也许有点晚了,但是实现LocalExecutor对我有用。
from airflow.executors.local_executor import LocalExecutor
subdag = SubDagOperator(
task_id=task_id,
default_args=default_args,
executor= LocalExecutor(),
dag=dag
)