Airflow WebServer UI显示DAG导入错误但DAG运行正常,求原因排查
Airflow WebServer UI显示导入错误但DAG运行正常的排查
问题描述
我的Airflow WebServer UI显示导入错误(截图如下):
但DAG运行完全正常,无任何错误。请问这可能是什么问题?
airflow info 输出信息
Apache Airflow version | 2.5.1 executor | LocalExecutor task_logging_handler | airflow.utils.log.file_task_handler.FileTaskHandler sql_alchemy_conn | postgresql+psycopg2://airflow:xxx@localhost:25011/airflow dags_folder | /opt/airflow/dags plugins_folder | /opt/airflow/plugins base_log_folder | /opt/airflow/logs remote_base_log_folder | System info OS | Linux architecture | x86_64 uname | uname_result(system='Linux', node='hellothere', release='4.18.0-425.10.1.el8_7.x86_64', version='#1 SMP Wed Dec 14 16:00:01 EST 2022', machine='x86_64') locale | ('en_US', 'UTF-8') python_version | 3.9.13 (main, Nov 9 2022, 13:16:24) [GCC 8.5.0 20210514 (Red Hat 8.5.0-15)] python_location | /opt/.venv/bin/python Tools info git | git version 2.31.1 ssh | OpenSSH_8.0p1, OpenSSL 1.1.1k FIPS 25 Mar 2021 kubectl | NOT AVAILABLE gcloud | NOT AVAILABLE cloud_sql_proxy | NOT AVAILABLE mysql | NOT AVAILABLE sqlite3 | 3.26.0 2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238alt1 psql | psql (PostgreSQL) 14.7 Paths info airflow_home | /opt/airflow system_path | /opt/.venv/bin:/opt/.server/.vscode-server/bin/97dec172d3256f8ca4bfb2143f3f76b503ca0534/bin/remote-cli:/home/d5291029/.local/bin:/home/d5291029/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/puppetlabs/bin python_path | /opt/.venv/bin:/opt/airflow/dags/backend/src:/usr/lib64/python39.zip:/usr/lib64/python3.9:/usr/lib64/python3.9/lib-dynload:/opt/.venv/lib64/python3.9/site-packages:/opt/.venv/lib/python3.9/site-packages:/opt/airflow/dags:/opt/airflow/config:/opt/airflow/plugins airflow_on_path | True Providers info apache-airflow-providers-cncf-kubernetes | 5.2.1 apache-airflow-providers-common-sql | 1.3.3 apache-airflow-providers-ftp | 3.3.0 apache-airflow-providers-http | 4.1.1 apache-airflow-providers-imap | 3.1.1 apache-airflow-providers-sqlite | 3.3.1
进程残留情况
尝试用airflow standalone终止并重启服务后,仍有部分进程残留:
dp-post+ 30859 0.0 0.1 3385112 22688 ? Ss 05:02 0:00 postgres: DHKPG00011: airflow airflow 127.0.0.1(34514) idle dp-post+ 30861 0.0 0.1 3385112 22396 ? Ss 05:02 0:00 postgres: DHKPG00011: airflow airflow 127.0.0.1(34540) idle dp-post+ 30863 0.0 0.2 3386700 29224 ? Ss 05:02 0:00 postgres: DHKPG00011: airflow airflow 127.0.0.1(34562) idle dp-post+ 30865 0.0 0.2 3385112 25216 ? Ss 05:02 0:00 postgres: DHKPG00011: airflow airflow 127.0.0.1(34582) idle dp-post+ 30867 0.0 0.2 3386700 29632 ? Ss 05:02 0:00 postgres: DHKPG00011: airflow airflow 127.0.0.1(34600) idle dp-post+ 30869 0.0 0.2 3385112 25476 ? Ss 05:02 0:00 postgres: DHKPG00011: airflow airflow 127.0.0.1(34618) idle dp-post+ 30895 0.0 0.2 3386840 30460 ? Ss 05:02 0:00 postgres: DHKPG00011: airflow airflow 127.0.0.1(34796) idle dp-post+ 30897 0.0 0.2 3386576 27120 ? Ss 05:02 0:00 postgres: DHKPG00011: airflow airflow 127.0.0.1(34816) idle dp-post+ 30901 0.0 0.2 3386688 28072 ? Ss 05:02 0:00 postgres: DHKPG00011: airflow airflow 127.0.0.1(34836) idle dp-post+ 49292 0.0 0.2 3385848 24976 ? Ss 05:22 0:00 postgres: DHKPG00011: airflow airflow 10.227.22.152(64509) idle d5291029 52202 0.0 0.0 12148 1152 pts/7 S+ 05:35 0:00 grep --color=auto airflow d5291029 53845 0.0 1.5 604964 189232 ? S Mar08 0:12 gunicorn: master [airflow-webserver] d5291029 63252 0.0 1.4 609168 173904 ? S Mar08 0:00 [ready] gunicorn: worker [airflow-webserver] d5291029 63253 0.0 1.4 609308 173920 ? S Mar08 0:00 [ready] gunicorn: worker [airflow-webserver] d5291029 63254 0.0 1.4 608260 172752 ? S Mar08 0:00 [ready] gunicorn: worker [airflow-webserver] d5291029 63255 0.0 1.4 607748 172436 ? S Mar08 0:00 [ready] gunicorn: worker [airflow-webserver]
可能原因及解决方法
1. WebServer与Scheduler的Python环境不一致
WebServer进程可能未加载指定的虚拟环境(/opt/.venv/bin/python),导致模块导入路径和Scheduler不一致。
- 解决:手动杀掉所有残留的WebServer进程,再激活虚拟环境重启服务:
kill 53845 63252 63253 63254 63255 source /opt/.venv/bin/activate airflow webserver --daemon
2. DAG导入路径逻辑差异
WebServer加载DAG时的工作目录、导入顺序和Executor执行任务时不同,导致模块找不到。你的python_path包含/opt/airflow/dags/backend/src,但可能存在导入方式问题。
- 解决:
- 将DAG中的相对导入改为绝对导入;
- 确保
backend/src目录下存在__init__.py文件,标记为Python可导入包; - 先执行
airflow dags list验证命令行下的DAG导入状态,确认是否有导入错误。
3. WebServer缓存旧错误状态
Airflow WebServer会缓存DAG的导入结果,即使问题已修复,缓存未更新仍会显示错误。
- 解决:
- 彻底杀掉所有WebServer进程后重启;
- 可清理元数据库中DAG导入错误的记录,或直接重启服务刷新缓存。
4. 旧进程残留导致状态不一致
当前WebServer进程是3月8日启动的,说明airflow standalone未彻底终止旧进程,新服务未生效。
- 解决:
pkill -f airflow-webserver pkill -f airflow-scheduler airflow standalone
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

