You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow升级后出现SerializedDagNotFound错误是否会导致Scheduler宕机?

推测合理性验证

你的推测完全成立。Airflow 2.x 默认开启了序列化DAG机制,调度器运行时会优先读取元数据库中存储的序列化DAG信息,无需每次都扫描DAG文件。当DAG文件被删除后,默认配置下元数据库中对应的DAG记录不会被物理删除,只会被自动标记为active=False,如果调度器中仍残留该DAG的历史调度计划、或旧的DAG运行实例还在处理,就会触发airflow.exceptions.SerializedDagNotFound错误。
Airflow 1.10.x 未默认开启序列化DAG机制,删除DAG文件后不会触发这类报错,这是你版本迁移后才出现问题的核心原因。

错误与调度器宕机的关联

该错误本身不会直接导致调度器宕机。如果出现调度器偶发宕机,建议排查两个方向:

  • 检查是否开启了调度器fail-fast类的特殊配置,默认配置下这类业务错误只会被记录日志,不会触发进程退出
  • 排查AWS ECS层面的事件:是否存在CPU/内存阈值触发OOM kill、调度器健康检查失败被ECS强制重启的情况,Cloudwatch默认仅捕获进程输出的日志,ECS强制终止的事件需要到ECS事件中心查看。

active与is_paused状态的区别

两个字段的控制逻辑完全独立:

  • is_paused:控制DAG的调度开关,为True时调度器不会生成新的DAG Run,已经生成的DAG Run仍会正常执行,该字段就是UI上ON/OFF按钮直接控制的字段,你之前的观察完全正确。
  • active:标记DAG是否存在于当前DAG目录中,当Airflow扫描DAG目录找不到对应DAG文件时,会自动把该DAG的active字段设为False,active=False的DAG不会在UI的任何默认视图中展示,调度器也会停止处理该DAG的所有相关任务。

状态修改方法与问题修复方案

UI修改限制

UI默认没有提供修改active字段的入口,仅能通过UI的ON/OFF按钮修改is_paused的值。如果要修改active字段,可通过两种方式实现:

  • 把被删除的DAG文件重新放回DAG目录,等待DAG扫描完成后,系统会自动把active字段改回True,DAG会重新在UI展示
  • 直接操作元数据库,执行SQL更新对应记录的active值,或者直接删除已经不需要的active=False的DAG记录,示例SQL:
-- 执行前请确认对应DAG不需要恢复
DELETE FROM dag WHERE active = FALSE;

永久避免报错的配置

你可以在airflow.cfg中开启自动清理非活跃DAG的配置:

[scheduler]
delete_orphaned_dags_after = 24h

开启后,调度器会自动删除已经超过24小时处于active=False状态的DAG及其关联记录,不会再触发对应的序列化DAG找不到的错误。


内容的提问来源于stack exchange,提问作者mrc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:12:00