【发布时间】: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 或心跳机制?
【问题讨论】:
标签: apache-spark tcp hadoop-yarn rpc