
# 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]所示。
 表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应用可以提早退出。
