计划程序重新启动后,Airflow将创建重复的子DAG运行
我使用的是安装在python 3.6.5上的Airflow版本1.10.3 我有一个DAG定义,它由几个bash和python操作符以及一些子DAG操作符组成。DAG计划每分钟运行一次,计划程序重新启动后,Airflow将创建重复的子DAG运行,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我使用的是安装在python 3.6.5上的Airflow版本1.10.3 我有一个DAG定义,它由几个bash和python操作符以及一些子DAG操作符组成。DAG计划每分钟运行一次,max\u active\u runs设置为1,catchup设置为False(类似cron) 有时我发现自己必须重新启动Ariflow调度程序(例如,启用配置更改)。如果在子DAG处于运行状态时发生这种情况,我会看到一些奇怪的行为: 子DAG及其父DAG仍在运行(如浏览-->DAG运行下的UI所示,以及运行机器
max\u active\u runs
设置为1,catchup
设置为False(类似cron)
有时我发现自己必须重新启动Ariflow调度程序(例如,启用配置更改)。如果在子DAG处于运行状态时发生这种情况,我会看到一些奇怪的行为:子DAG及其父DAG仍在运行(如
浏览-->DAG运行
下的UI所示,以及运行机器上的运行进程列表所示)。几分钟后,我收到一个通知,说明子DAG任务(运行子DAG的父DAG内的任务)被检测为僵尸。这会导致调度程序将父DAG标记为失败,并在一分钟后继续重新调度。但是,当这种情况发生时,我可以清楚地看到原始的子DAG仍在运行,并且在重新调度父DAG后,我突然有2个正在运行的子DAG实例(即使我将
max\u active\u runs
设置为1)
我举了一个小例子来重现这种行为:
从datetime导入datetime,timedelta
从气流导入DAG
从afflow.operators.bash_operator导入bash operator
从airflow.operators.dummy_operator导入dummy operator
从afflow.operators.subdag_操作符导入subdag操作符
默认参数={
“所有者”:“气流测试”,
“依赖于过去”:False,
“开始日期”:日期时间(2015年6月1日),
'电子邮件':['您的电子邮件。email@airflow.com'],
“失败时发送电子邮件”:True,
“重试时发送电子邮件”:True,
“重试”:1,
“重试延迟”:timedelta(分钟=1),
}
def make_subdag():
与达格(
“dag测试.子dag”,
默认参数=默认参数,
时间间隔=时间增量(分钟=1),
并发性=5,
最大有效运行次数=1,
catchup=False,
方向='TB',
)作为子DAG:
Bash操作员(
task\u id='subdag\u task',
bash_command='while true;do echo ping&&sleep 10;done',
)
返回子段
与达格(
“dag试验”,
默认参数=默认参数,
时间间隔=时间增量(分钟=1),
并发性=5,
最大有效运行次数=1,
catchup=False,
)作为dag:
虚拟任务=虚拟操作员(
任务\u id='dummy',
)
子DAG_任务=子DAG运算符(
任务id='subdag',
subdag=make_subdag(),
)
虚拟任务>>子任务
复制步骤:
airflow.cfg
中调度程序\u僵尸\u任务\u阈值指定的时间量(默认为5分钟)