Airflow DAG仅本地存在、主调度器未识别问题求助
我之前也碰到过一模一样的问题,踩了不少坑后总结出几个实用的排查和解决方向,亲测有效:
强制触发DAG解析与调度器重启
有时候DAG文件放到目录后,调度器不会立刻扫描到。可以先手动触发DAG列表刷新,让元数据库同步最新的DAG信息:airflow dags list接着重启调度器服务,确保它重新扫描DAG目录:
# 如果你用systemd管理Airflow sudo systemctl restart airflow-scheduler # 用supervisord的话 supervisorctl restart airflow-scheduler另外建议把
airflow.cfg里的load_examples设为False,避免示例DAG占用资源或干扰扫描逻辑。检查DAG文件的权限与所属用户
调度器进程必须有读取DAG文件的权限,这是很容易忽略的点。先查看DAG目录和文件的权限:ls -l /path/to/your/configured/dags确保文件的所属用户/组和Airflow调度器运行的用户一致(通常是
airflow:airflow),如果权限不对,批量修改:sudo chown -R airflow:airflow /path/to/your/configured/dags sudo chmod -R 755 /path/to/your/configured/dags验证DAG文件的语法与完整性
虽然backfill能运行,但DAG文件可能存在隐性语法问题,导致调度器无法正确解析加载。可以用Airflow自带的命令验证:airflow dags test your_dag_id 2024-01-01或者直接用Python编译检查语法错误:
python3 -m py_compile /path/to/your/dag/file.py修复发现的问题后,记得重启调度器。
调整调度器的DAG扫描间隔
查看airflow.cfg里的dag_dir_list_interval参数,默认是300秒(5分钟),刚放进去的DAG可能需要等一会儿才会被扫描到。可以临时把这个值改小(比如60秒),测试生效后再改回默认值。分布式部署下的DAG目录同步检查
如果是集群环境部署Airflow,一定要确保所有节点(尤其是主调度器所在节点)的DAG目录是同步的。比如用NFS共享DAG目录,或者通过Git自动同步,避免出现你本地放了DAG,但调度器节点看不到的情况。
补充:如果以上方法都没解决,直接看调度器日志找线索,日志里会明确说明DAG未被加载的原因:
tail -f /path/to/airflow/logs/scheduler/latest.log常见的问题有依赖包缺失、DAG ID重复、变量引用错误等。
内容的提问来源于stack exchange,提问作者bronzels

