Airflow + Docker + Redshift:即使在Redshift上执行查询,任务也失败



我有一个查询,花了大约30分钟完成,输出是卸载一些parquet文件到S3,从Redshift。

我正在使用操作符RedshiftToS3Operator,大约5分钟后,我收到这个错误:

struct.error: unpack_from requires a buffer of at least 5 bytes

尝试一个PostgresOperator操作符,我收到一个不同的错误,在相同的5分钟后:

psycopg2.operationalerror: ssl syscall error: eof detected

通过一些研究,我认为这个错误是因为连接在空闲5分钟后崩溃。我能够在Jupyter Notebook上复制这段代码,一切都很顺利,这让我认为docker是问题所在。

所有时间,即使气流显示错误,查询都成功地在红移中执行。

但我也试图运行Psycopg2代码,而不是使用一些抽象,这次我能够超过5分钟,但不是打破5分钟,运行状态只是不更新,即使在红移进程结束后。

基本上我无法跟踪查询是否有效,只能打开Redshift UI。

将此添加到我的气流调度程序的Docker组成部分:

sysctls:
- net.ipv4.tcp_keepalive_time=200
- net.ipv4.tcp_keepalive_intvl=200
- net.ipv4.tcp_keepalive_probes=5

Docker容器的TCP设置可能是罪魁祸首。

从https://github.com/docker/for-mac/issues/3679# issuecomment - 642885218

最新更新