Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计划程序重新启动后,Airflow将创建重复的子DAG运行_Airflow_Airflow Scheduler - Fatal编程技术网

计划程序重新启动后,Airflow将创建重复的子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所示,以及运行机器

我使用的是安装在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所示,以及运行机器上的运行进程列表所示)。几分钟后,我收到一个通知,说明子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(),
)
虚拟任务>>子任务
复制步骤:

  • 将包含DAG定义的python文件添加到DAG文件夹中
  • 启动气流计划程序
  • 解除DAG的暂停
  • 等待DAG和SubDAG达到运行状态
  • 通过终止其活动进程然后再次启动来重新启动计划程序(注意:仅终止计划程序,而不是DAG的运行作业及其任务)
  • 等待
    airflow.cfg
    中调度程序\u僵尸\u任务\u阈值指定的时间量(默认为5分钟)
  • 您现在应该会收到一封电子邮件通知,说明SubDAG任务被检测为僵尸,不久之后您将看到SubDAG有2个正在运行的作业(在UI的DAG runs表中)
  • 这是气流的某种缺陷,还是我的配置和/或DAGs定义遗漏了什么