执行 yarn application 连接失败且超时的错误解决

在AWS EMR使用多个Master高可用部署场景下,需要创建3台Master节点上。登录到其中一台节点,运行如下命令:

yarn application -list

在某些场景下会遇到如下报错。报错信息:

WARN ipc.Client: Failed to connect to server: ip-172-31-22-134.cn-northwest-1.compute.internal/172.31.22.134:8032: retries get failed due to exceeded maximum allowed retries number: 0
java.net.ConnectException: Connection refused

错误场景如下截图。

不过在等待一段时间后,也可以看到yarn返回了最终的输出。如下截图。

造成这个问题是因为EMR开启了多Master部署,有三台Master节点,分别叫做rm1、rm2、rm3。当前登录的节点可能是rm1,运行yarn查询的时候默认先查询rm1。但是,整个集群的master已经切换走了,rm1并不是master角色,所以yarn会反复查询失败,然后去轮询到下一个节点rm2,继续失败,最后在rm3节点查询完成。

接下来验证下,当前的集群中谁是master节点。执行如下命令:

yarn rmadmin -getAllServiceState

执行效果如下截图。

可以从如上命令看出,IP结尾是239的才是master节点。那么这个239节点是否在yarn查询列表的第一位呢?还是排在最后一位?

编辑如下配置文件:

sudo vim /etc/hadoop/conf.empty/yarn-site.xml

查看里边的resource manager的顺序如下:

如上截图可以看到,顺序是rm1、rm2、rm3,而rm1对应的IP并不是当前的master节点。所以才有了这个查询失败。

解决办法:把顺序改成rm3、rm2、rm1。改完后,再运行yarn,就没有报错了。如下截图。

至此问题解决。