从S3同步Airflow DAG导致任务执行失败问题排查
排查Airflow DAG无法识别问题的实操步骤
1. 直接验证DAG文件的有效性
进入Airflow Pod,执行以下命令检查文件是否能被正常解析:
# 列出该文件中包含的DAG airflow dags list -f /opt/airflow/dags/repo/dags/dag_manual.py # 详细解析文件并输出错误 airflow dags parse --subdir /opt/airflow/dags/repo/dags/dag_manual.py
如果文件存在语法错误、依赖缺失或DAG定义问题,这里会直接输出具体报错。同时严格确认DAG文件中定义的dag_id与执行命令时使用的DAG_MANUAL完全一致——Airflow的DAG ID区分大小写,哪怕字母大小写不同都会导致识别失败。
2. 检查Airflow的DAG扫描路径配置
- 查看当前Airflow的核心DAG目录配置:
如果默认目录是airflow config get-value core dags_folder/opt/airflow/dags,而你的DAG存放在/opt/airflow/dags/repo/dags/子目录下,需要确保Airflow会扫描子目录,且未通过core.dag_ignore_patterns排除该路径。 - 若需要添加额外扫描路径,在Helm的
values.yaml中配置:
更新配置后重启Airflow组件生效。airflow: config: core: dags_folder: "/opt/airflow/dags,/opt/airflow/dags/repo/dags"
3. 确认文件与目录权限
检查DAG文件及父目录的权限,确保Airflow运行用户(通常为airflow)有读取权限:
ls -l /opt/airflow/dags/repo/dags/dag_manual.py ls -ld /opt/airflow/dags/repo/dags/
文件权限至少需为644,目录权限至少为755。如果S3同步工具以root用户写入文件,可在Helm配置中调整Pod的securityContext,让容器以airflow用户运行。
4. 查看调度器日志获取解析细节
调度器会定期扫描DAG目录,其日志中可能包含任务执行报错未体现的解析失败信息:
kubectl logs <airflow-scheduler-pod-name> | grep "dag_manual.py"
重点关注是否有导入错误、依赖缺失等提示。
5. 验证S3同步的文件完整性
对比Pod内文件与S3源文件的MD5值,确认同步过程中未出现文件损坏或截断:
md5sum /opt/airflow/dags/repo/dags/dag_manual.py
将结果与S3控制台中对应文件的MD5值对比。
内容的提问来源于stack exchange,提问作者Renan Nogueira
相关产品推荐
相关产品推荐

