在Airflow中,我该如何处理错误“此DAG在Web服务器DagBag对象中不可用 . 它显示在此列表中,因为调度程序在元数据库中将其标记为活动”?
我已经将新的DAG复制到Airflow服务器,并尝试过:
-
取消暂停并刷新它(基本操作程序,在上一个答案中给出https://stackoverflow.com/a/42291683/160406)
-
重新启动网络服务器
-
重新启动调度程序
-
停止Web服务器和调度程序,重置数据库(
airflow resetdb
),然后再次启动Web服务器和调度程序 -
正在运行
airflow backfill
(此处建议Airflow "This DAG isnt available in the webserver DagBag object ") -
正在运行
airflow trigger_dag
调度程序日志显示正在处理它并且没有发生错误,我可以通过CLI与它进行交互并查看它的状态,但它仍然没有出现在Web UI中 .
编辑:Web服务器和调度程序在具有相同airflow.cfg的同一台计算机上运行 . 他们没有在Docker中运行 .
它们由Supervisor运行,它们将它们作为同一用户(气流)运行 . 气流用户对所有dag文件具有读,写和执行权限 .
4 回答
我自己就是这个问题 . 更改权限,重置元数据库,重新启动网络服务器甚至进行一些潜在的代码更改以纠正这种情况后,它没有发生 .
但是,我注意到即使我们停止了网络服务器,我们的gunicorn进程仍在运行 . 杀死这些流程然后重新启动所有流程都会取得成功
如果airflow_home - dags_folder配置参数对于调度程序,webUI和命令行界面是相同的,则是导致错误的唯一原因:
可以是python脚本中的文件权限或错误 .
请检查
以正常的python脚本运行dag并检查错误
airflow.cfg中的用户和创建dag的用户应该相同,或者dag应该具有对气流用户的执行权限
这对我有帮助......
然后重新启动气流调度程序和Web服务器 .
使用Airflow 1.9,我没有遇到僵尸炮声过程的问题 .
我做了一个简单的重启:
systemctl restart airflow-webserver
并强制webserver刷新DAG状态 .