负载均衡器后面的Spark yarn-client模式,可丢弃无效的TCP连接

问题描述

我正在客户端模式下在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或心跳机制?

解决方法

我能够通过将流量路由通过负载均衡器来解决此问题。