我在客户端模式下对纱线运行Spark。驱动程序通过负载均衡器与ApplicationMaster分离,负载均衡器会在5分钟后终止非活动的TCP连接。这甚至会在5分钟后杀死活跃的纱线作业。
这是因为ApplicationMaster opens an RPC connection to the driver and sends the RegisterClusterManager message。之后,只有当执行程序的数量增加或减少时,它才会通过此连接发送消息。这可能不会每五分钟发生一次。在最后一次RPC调用五分钟后,负载均衡器会由于不活动而终止RPC连接,并在RPC连接上调用onDisconnected方法,从而终止纱线作业。
这是一个企业环境,我无法更改有关丢弃非活动TCP会话的负载均衡器行为。我可以忍受纱线作业在5分钟不活动后超时,但正在运行的作业不应该终止。
我怀疑正确的方法应该是使用OS-level TCP keepalive for the connections。然而,我正在使用的Spark版本还没有提供这个功能。
有没有办法解决这个问题,而不使用我自己的Spark版本,它在RPC会话中手动实现保持连接或心跳机制?
发布于 2020-09-11 15:13:36
我能够通过路由流量通过负载均衡器来解决这个问题。
https://stackoverflow.com/questions/63469750
复制相似问题