负载均衡器后面的 Spark yarn-client 模式会丢弃非活动 TCP 连接

Posted

技术标签:

【中文标题】负载均衡器后面的 Spark yarn-client 模式会丢弃非活动 TCP 连接【英文标题】:Spark yarn-client mode behind a load balancer that drops inactive TCP connections 【发布时间】:2020-08-18 13:31:27 【问题描述】:

我在客户端模式下在 YARN 上运行 Spark。驱动程序通过负载均衡器与 ApplicationMaster 分离,负载均衡器会在 5 分钟后终止非活动 TCP 连接。这甚至会在 5 分钟后杀死活跃的 YARN 作业。

这是因为ApplicationMaster opens an RPC connection to the driver and sends the RegisterClusterManager message。之后,如果执行者的数量增加或减少,它只会通过此连接发送消息。这可能不会每五分钟发生一次。在最后一次 RPC 调用五分钟后,负载均衡器因不活动而终止 RPC 连接,并在 RPC 连接上调用 onDisconnected 方法,终止 YARN 作业。

这是一个公司环境,我无法更改负载均衡器关于丢弃非活动 TCP 会话的行为。我可以忍受 YARN 作业在它们处于非活动状态 5 分钟后超时,但正在运行的作业不应终止。

我怀疑正确的方法是使用OS-level TCP keepalive for the connections。但是,我使用的 Spark 版本还没有提供此功能。

有什么方法可以解决这个问题,而无需滚动我自己的 Spark 版本,该版本在该 RPC 会话中手动实现 keepalive 或心跳机制?

【问题讨论】:

【参考方案1】:

我能够通过将流量路由到负载平衡器来解决这个问题。

【讨论】:

以上是关于负载均衡器后面的 Spark yarn-client 模式会丢弃非活动 TCP 连接的主要内容,如果未能解决你的问题,请参考以下文章

负载均衡器后面的 Redis 集群?

带有 https 的负载均衡器后面的 Keycloak Docker 失败

IIS 7 - 通过负载均衡器后面的 IP 地址限制应用程序

如何在负载均衡器后面设置 Angular 和 OpenId

在负载均衡器和 SSL 后面配置 WCF

如何在负载均衡器 Laravel 后面的 nginx 中将远程 IP 地址列入白名单