Airflow dag 中 postgres_operator 的问题

Issues with postgres_operator in Airflow dag

我目前正在使用 Airflow 1.8.2 来安排一些 EMR 任务,然后在我们的 Redshift 集群上执行一些长时间的 运行ning 查询。为此,我使用 postgres_operator。查询 运行 大约需要 30 分钟。但是,一旦完成,连接就永远不会关闭,并且操作员 运行 会持续一个半小时,直到每次都在 2 小时标记处终止。终止时的消息是服务器意外关闭了连接。

我检查了 Redshift 端的日志,它显示查询有 运行 并且连接已关闭。不知何故,这永远不会传回给 Airflow。我可以检查更多内容的任何指示都会有所帮助。为了提供更多信息,我的 Airflow 安装是 https://github.com/puckel/docker-airflow docker 图像的扩展,在 ECS 集群中是 运行 并且以 SQLite 作为后端,因为我仍在测试 Airflow。另外,我在后端使用 sequential executor。我将不胜感激在这件事上的任何帮助。

我们之前遇到过类似的问题,但我使用的是 SQLAlchemy 到 Redshift,如果你使用的是 postgres_operator,它应该非常相似。如果 Redshift 没有看到任何 activity 长 运行 查询,似乎 Redshift 将关闭连接,在您的情况下,30 分钟是相当长的查询。

检查 https://www.postgresql.org/docs/9.5/static/runtime-config-connection.html 您有三个设置,tcp_keepalives_idletcp_keepalives_idletcp_keepalives_count,它们向 redshift 发送实时消息以指示“嘿,我还活着。

您可以将以下内容作为参数传递,如下所示:connect_args={'keepalives': 1, 'keepalives_idle':60, 'keepalives_interval': 60}