2017-09-25 117 views
1

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

我检查了Redshift结束的日志,它显示查询已经运行并且连接已关闭。不知何故,这绝不会回传给Airflow。我可以检查的任何方向都会有所帮助。为了提供更多信息,我的Airflow安装是https://github.com/puckel/docker-airflow docker映像的扩展,在ECS群集中运行,并且SQLite作为后端,因为我仍在测试Airflow out。另外,我使用sequential executor作为后端。我希望在这个问题上有任何帮助。

回答

1

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

检查https://www.postgresql.org/docs/9.5/static/runtime-config-connection.html 你有三个设置,tcp_keepalives_idletcp_keepalives_idletcp_keepalives_count,发送现场消息红移表示“嘿,我还活着

您可以通过以下作为参数,所以这样的事情: connect_args={'keepalives': 1, 'keepalives_idle':60, 'keepalives_interval': 60}

+0

谢谢您的回答。我最终定义了一个自定义运算符和钩子,让我重写keepalives参数。 – shomo