文档首页/ MapReduce服务 MRS/ 组件操作指南(安卡拉区域)/ 使用Spark/ Spark常见问题/ Spark Core/ Spark应用执行过程中,日志中一直打印getApplicationReport异常且应用较长时间不退出
更新时间:2024-11-29 GMT+08:00

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应用可以提早退出。