Airflow 依赖关系阻止任务安排

Mar*_*ría 5 airflow airflow-scheduler

我有一个气流实例,直到周日为止,已经毫无问题地运行了 2 个月。我的气流任务所依赖的系统发生了停电,并且某些任务排队了 2 天。之后,我们决定最好将当天的所有任务标记为失败并丢失该数据。

尽管如此,现在所有新任务都会在适当的时间触发,但它们从未被设置为任何状态(既不排队也不运行)。我检查日志并看到以下输出:

依赖关系阻止任务被安排

所有依赖项均已满足,但任务实例未运行。在大多数情况下,这仅意味着该任务可能很快就会被安排,除非:

  • 调度程序已关闭或负载过重
  • 以下配置值可能会限制可排队进程的数量:parallelism、dag_concurrency、max_active_dag_runs_per_dag、non_pooled_task_slot_count
  • 该任务实例已运行并手动更改其状态(例如在 UI 中清除)

我的印象是第三个主题是它不起作用的原因。调度程序和网络服务器正在工作,但是我重新启动了调度程序,但仍然得到相同的结果。我还删除了一项作业的mysql数据库中的数据,但它仍然无法运行。

我还看到几篇文章说它没有运行,因为被depens_on_past设置为 true,如果之前的运行失败,则下一个将永远不会被执行。我也查了一下,不是我的情况。

任何意见都会非常感激。有任何想法吗?谢谢

Pau*_*ans 0

在调试类似的问题时,我发现了这个设置:AIRFLOW__SCHEDULER__MAX_DAGRUNS_PER_LOOP_TO_SCHEDULE(或http://airflow.apache.org/docs/apache-airflow/2.0.1/configurations-ref.html#max-dagruns-per-loop-to-schedule ) ),检查气流代码,似乎调度程序查询 dagruns 进行检查(考虑运行 ti 的 for),此查询仅限于该行数(默认情况下为 20)。因此,如果您有 >20 个 dagruns 以某种方式被阻止(在我们的例子中,因为 ti 处于重试状态),那么它不会考虑其他 dagruns,即使这些可以正常运行。