气流网络服务器无法打开DAG?

时间:2020-01-16 01:39:55

标签: airflow

存在无法在气流Web服务器UI中打开DAG的问题。

要注意的一件事是,有问题的DAG最初是在尝试运行时导致超时错误,因此我编辑了airflow.cfg文件以使其具有一行...

dagbag_import_timeout = 300

现在进行此更改后,即可运行...

airflow list_dags

可以看到dag成功构建。

然后转到Web服务器,在UI中刷新dag,将DAG状态切换为“打开”,单击DAG尝试查看图形视图。

要么收到有关超时的消息,如...

损坏的DAG:[/ home / airflow / airflow / dags / mydag.py]超时,PID:44818

(尽管dag在airflow list_dags命令期间似乎成功构建)或Web服务器页面显示了一些浏览器错误,例如“页面未发送数据”,并且重新加载后,我看到DAG已关闭(在无论哪种情况,airflow-webserver.log中都没有问题的征兆。我什至注意到,其他通常运行得很快的dags现在运行起来要慢得多。

由于在手动运行airflow list_dags时dag似乎能够构建,但在Web服务器中却无法构建,我认为也许我需要更改其中一个Web服务器超时配置,例如。

# Number of seconds the webserver waits before killing gunicorn master that doesn't respond
web_server_master_timeout = ...
# Number of seconds the gunicorn webserver waits before timing out on a worker
web_server_worker_timeout = ...
...
log_fetch_timeout_sec = ...
...

但对潜在的气流机制还没有足够的经验来确定如何将它们连接起来。

如果有帮助,请提供更多调试信息:

[root@airflowetl airflow]# ps -aux | grep webserver
airflow   16740  0.8  0.2 782620 134804 ?       S    15:17   0:06 [ready] gunicorn: worker [airflow-webserver]
airflow   29758  2.3  0.2 756164 108644 ?       S    15:26   0:03 [ready] gunicorn: worker [airflow-webserver]
airflow   33820 14.8  0.1 724788 78036 ?        S    15:29   0:01 gunicorn: worker [airflow-webserver]
airflow   33854 26.7  0.1 724784 78032 ?        S    15:29   0:01 gunicorn: worker [airflow-webserver]
airflow   33855 26.5  0.1 724816 78064 ?        S    15:29   0:01 gunicorn: worker [airflow-webserver]
root      34072  0.0  0.0 112712   968 pts/0    S+   15:29   0:00 grep --color=auto webserver
airflow   91174  1.6  0.1 735708 82468 ?        S    14:14   1:14 /usr/bin/python3 /home/airflow/.local/bin/airflow webserver -D
airflow   91211  0.0  0.1 355040 53472 ?        S    14:14   0:01 gunicorn: master [airflow-webserver]

任何有更多气流经验的人都知道为什么会发生这种情况以及如何解决? (也许我应该扩展一些airflow.cfg超时配置)?


更新:

进一步调试后,问题似乎出在dag中配置/创建的特定任务。 DAG定义本身不是很简单,也不是特定于应用程序的,因此需要在发布之前尝试将其更多地解析为有意义和可读的内容。尽管这仍不能解释为什么dag似乎是在list_dags气流期间构建的,而不是在Web服务器中构建的。

按照我可以测量的方式进行,对airflow list_dags命令(仅使用time工具运行)进行一次或不一次更改,时差为...

before change: real 1m31.201s
after change: real  2m39.744s

更新:

经过更多调试后,我怀疑问题最终出在Web服务器上。运行airlist_dags时始终能够构建dag,但是当其他dags正在运行时 ,则无法在网络服务器上单击dag,而不会引发超时错误。 当没有其他dag正在运行时,可以在Web服务器中查看dag(树和图形),但是返回主屏幕时,看到相同的“ BAG损坏; ...超时,PID :1234“错误与以前一样

2 个答案:

答案 0 :(得分:0)

对气流list_dags命令(仅使用time实用程序运行)进行更改(不进行更改),时间差为...

before change: real 1m31.201s
after change: real  2m39.744s

airflow.cfg文件中查找与Web服务器和超时(尤其是超时值<2m39s)有关的所有内容,其中秒数少于新的dag构建时间,发现...

# Number of seconds the webserver waits before killing gunicorn master that doesn't respond
web_server_master_timeout = 120

# Number of seconds the gunicorn webserver waits before timing out on a worker
web_server_worker_timeout = 120
...
# The amount of time (in secs) webserver will wait for initial handshake
# while fetching logs from other worker machine
log_fetch_timeout_sec = 5

运行网络服务器(而不是作为守护进程),只是看着输出,当它尝试用新修改的dag填充dab包时,我看到像...一样的gnuicorn工人错误。

[2020-01-16 11:12:22 -1000] [137034] [CRITICAL] WORKER TIMEOUT (pid:137039)
[2020-01-16 11:12:22 -1000] [137034] [CRITICAL] WORKER TIMEOUT (pid:137040)
[2020-01-16 11:12:22 -1000] [137034] [CRITICAL] WORKER TIMEOUT (pid:137041)
[2020-01-16 11:12:22 -1000] [137034] [CRITICAL] WORKER TIMEOUT (pid:137042)
[2020-01-16 11:12:22 -1000] [137039] [INFO] Worker exiting (pid: 137039)
[2020-01-16 11:12:22 -1000] [137041] [INFO] Worker exiting (pid: 137041)
[2020-01-16 11:12:22 -1000] [137042] [INFO] Worker exiting (pid: 137042)
[2020-01-16 11:12:22 -1000] [137040] [INFO] Worker exiting (pid: 137040)

web_server_worker_timeout从120更改为300(5分钟),并测试访问网络服务器中修改后的问题dag(树形图和图形视图)的速度似乎要快得多(最初启动后,超时错误继续在网络服务器中弹出)。问题似乎已解决。


请注意,仍然会在Web服务器中弹出超时错误(有时在刷新主页时)(尽管在Web服务器日志中找不到)。不能完全确定此问题的基本机制是什么,不希望在注释中进行任何进一步的解释,但是此问题确实已经解决。 我还注意到,修改问题dag后,所有DAG的运行速度似乎都变慢了,即。似乎需要更多的时间才能运行下一个任务(将其更改为占用更少的dagbag填充时间似乎可以解决)。目前尚不确定如何解决这些问题,因此任何建议都将不胜感激。


更新

重新启动服务器后,只要没有其他dag同时运行,DAG就会完全正常运行。 IDK可能的潜在原因(因为似乎没有其他方面的问题曾引起过这个问题)。

答案 1 :(得分:0)

我有类似的问题,就我而言,这是依赖服务未运行。我的任务依赖于MongoDBredis,并且它没有运行,因此我只是启动了它们,之后没有更多错误。