Spark应用执行过程中,日志中一直打印getApplicationReport异常且应用较长时间不退出
问题
Spark应用执行过程中,当driver连接RM失败时,会报下面的错误,且较长时间不退出。
16/04/23 15:31:44 INFO RetryInvocationHandler: Exception while invoking getApplicationReport of class ApplicationClientProtocolPBClientImpl over 37 after 1 fail over attempts. Trying to fail over after sleeping for 44160ms. java.net.ConnectException: Call From vm1/192.168.39.30 to vm1:8032 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
回答
在Spark中有个定期线程,通过连接RM监测AM的状态。由于连接RM超时,就会报上面的错误,且一直重试。RM中对重试次数有限制,默认是30次,每次间隔默认为30秒左右,每次重试时都会报上面的错误。超过次数后,driver才会退出。
RM中关于重试相关的配置项如表1所示。
参数 |
描述 |
默认值 |
---|---|---|
yarn.resourcemanager.connect.max-wait.ms |
连接RM的等待时间最大值。 |
900000 |
yarn.resourcemanager.connect.retry-interval.ms |
重试连接RM的时间频率。 |
30000 |
重试次数=yarn.resourcemanager.connect.max-wait.ms/yarn.resourcemanager.connect.retry-interval.ms,即重试次数=连接RM的等待时间最大值/重试连接RM的时间频率。
在Spark客户端机器中,通过修改“conf/yarn-site.xml”文件,添加并配置“yarn.resourcemanager.connect.max-wait.ms”和“yarn.resourcemanager.connect.retry-interval.ms”,这样可以更改重试次数,Spark应用可以提早退出。