负载均衡器后面的 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 连接的主要内容,如果未能解决你的问题,请参考以下文章
带有 https 的负载均衡器后面的 Keycloak Docker 失败