Airflow1.10.2调度器无报错停止调度 持续输出Harvesting DAG parsing result日志
故障原因
- DAG解析进程阻塞:Airflow 1.10.2版本采用单线程调度器架构,若某一个DAG文件中存在未配置超时的外部资源调用、隐式死循环或语法层面的隐性阻塞逻辑,会导致DAG解析进程挂死,调度器持续等待解析结果返回,只会循环输出
Harvesting DAG parsing result的INFO日志,无其他报错。 - 元数据库锁等待:该版本的元数据库表索引设计存在缺陷,当历史DAG运行记录、任务实例数据累计到一定量级时,DAG解析结果写入
scheduler_job、dag_run等核心表时会出现行锁长期等待,调度器无报错但完全停止作业调度逻辑。 - DAG解析队列积压:若近1个月DAG目录下新增了大量文件、或存在大量未清理的无效DAG碎片文件,会超出调度器默认解析进程的处理能力,解析队列持续满载,调度器不断收割解析结果但始终无法处理完积压任务,最终停止新作业调度。
修复方案
- 优先定位异常DAG:重启调度器时开启debug日志
airflow scheduler -D -v,故障复现时查看日志中卡住前最后处理的DAG文件,单独执行airflow list_dags -sd 对应DAG文件路径测试解析耗时,若长时间无返回则排查该DAG中的外部调用、循环逻辑,补充超时配置。 - 优化元数据库性能:清理6个月以上的历史任务实例、DAG运行记录,给元数据库补充缺失索引:
CREATE INDEX idx_dag_run_dag_id_execution_date ON dag_run(dag_id, execution_date); CREATE INDEX idx_scheduler_job_latest_heartbeat ON scheduler_job(latest_heartbeat); - 调整调度器配置参数:修改
airflow.cfg中相关配置,避免单进程阻塞影响整体调度:# 调整解析进程数为CPU核心数的1/2 parsing_processes = 4 # 单DAG解析超时自动杀掉进程 dag_file_processor_timeout = 120 # 降低调度器心跳间隔 scheduler_heartbeat_sec = 15 - 版本升级可选:如果允许做小版本升级,可升级到Airflow 1.10.x系列的最终稳定版1.10.15,该版本修复了1.10.2存在的大量调度器死锁、解析阻塞类问题,无需做核心业务逻辑适配。
内容的提问来源于stack exchange,提问作者Niels Jansen
相关产品推荐
相关产品推荐

