如何在气流中使用CLI清除故障DAG

时间:2018-05-02 09:12:12

标签: airflow

我有一些失败的DAG,让我们说从2月1日到2月20日。从那个日期开始,所有这些都成功了。

我尝试使用cli(而不是使用Web UI执行二十次):

airflow clear -f -t * my_dags.my_dag_id

但我有一个奇怪的错误:

airflow: error: unrecognized arguments: airflow-webserver.pid airflow.cfg airflow_variables.json my_dags.my_dag_id

编辑1:

就像@ tobi6解释的那样,*确实引起了麻烦。 知道了,我尝试了这个命令:

airflow clear -u -d -f -t ".*" my_dags.my_dag_id 

但它只返回失败的任务实例(-f标志)。 -d-u标志似乎不起作用,因为忽略(未返回)失败的下游和上游的任务实例。

编辑2:

与@ tobi6建议类似,使用-s-e许可选择日期范围内的所有DAG运行。这是命令:

airflow clear  -s "2018-04-01 00:00:00" -e "2018-04-01 00:00:00"  my_dags.my_dag_id.

但是,在上面的命令中添加-f标志只会返回失败的任务实例。是否可以在日期范围内选择所有失败的DAG运行的所有失败任务实例?

2 个答案:

答案 0 :(得分:2)

如果您在Linux bash中使用asterik *,它将自动扩展目录的内容。

这意味着它将使用当前工作目录中的所有文件替换asterik,然后然后执行您的命令。

这有助于避免自动扩展:

"airflow clear -f -t * my_dags.my_dag_id"

答案 1 :(得分:0)

到目前为止,我发现的一种解决方案是执行sql(在我的情况下为MySQL):

update task_instance t left join dag_run d on d.dag_id = t.dag_id and d.execution_date = t.execution_date
set t.state=null,
    d.state='running'
where t.dag_id = '<your_dag_id'
  and t.execution_date > '2020-08-07 23:00:00'
  and d.state='failed';

它将清除失败的dag_run上的所有任务状态,因为在Web UI中为整个dag运行按下了“清除”按钮。