首页 > 解决方案 > 气流调度程序不会排队一些已在 UI 中清除的任务

问题描述

我在 ui 中有一堆 DAG 运行。如果我在所有 DAG 运行中清除某些任务,则某些任务会正确触发,而其他任务则卡在清除状态。

目前我只是使用气流 CLI 来回填这些任务。这可行,但不幸的是,我需要一个完整的 CLI 会话来完成清理/重新处理方案。

标签: airflowairflow-scheduler

解决方案


原因是 DAG 运行的命名(以及类型)。

如果您进入气流元数据数据库并打开表“dag_runs”,您将看到 run_id。调度程序使用“scheduled__”标识它创建的运行,后跟日期时间。如果您回填,run_id 将被命名为“backfil_”,后跟日期时间。

调度程序只会检查和排队以“scheduled__”开头的 run_ids 的任务,表示DagRunType 为“scheduled”

如果您将 run_id 从 backfill_ 重命名为 schedule__,调度程序将识别 dag 运行并在下面调度已清除的任务。

此 SQL 查询会将 bacfill_ 更改为 schelduled__:

UPDATE dag_run
SET run_id = Replace(run_id, 'backfill_', 'scheduled__')
where id in (
    select id from dag_run where ("run_id"::TEXT LIKE '%backfill_%')); 
-- note that backfill_ is a single underscore, and scheduled__ is two. 
-- This is not a mistake in my case. But please review the values in your tabel. 

推荐阅读