YARN 应急预案

RM向ZK中写数据异常

现象描述

ResourceManager向ZooKeeper集群写入数据异常导致YARN服务不可用,ResourceManager服务日志异常信息如下:

[697242] - WARN [main-SendThread(ip:2181):ClientCnxn$SendThread@1102] -
Session 0x368a16867d20001 for server ip:2181, unexpected error, closing socket connection
and attempting reconnect java.io.IOException: Packet len7945008 is out of range!
at org.apache.zookeeper.ClientCnxnSocket.readLength(ClientCnxnSocket.java:112)
at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:79)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:366)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)

可能原因

ResourceManager向ZooKeeper集群写入数据时出现字节数超限异常。

定位思路

登录主ResourceManager实例的主机,查看ResourceManager业务日志。

处理步骤

登录主ResourceManager实例的主机,查看ResourceManager业务日志,看是否有“Packet len7945008 is out of range”异常信息。

修改ZooKeeper服务zookeeper-env.sh配置,设置jute.maxbuffer=10240000,依次重启ZK服务。

修改ResourceManager服务yarn-env.sh配置,设置jute.maxbuffer=10240000,依次重启RM服务(备→主),查看服务是否恢复。

是,操作结束。

否,执行步骤4。

若仍然无法恢复,则修改ResourceManager服务的yarn.resourcemanager.zk-state-store.parent-path配置为新地址,依次重启RM服务(备→主)。

YARN队列任务大量积压

现象描述

某用户队列大量积压。

可能原因

队列资源不够。

ZooKeeper服务异常。

ResourceManager服务异常。

定位思路

检查用户队列资源是否有空闲。

检查ZooKeeper服务是否正常。

检查ResourceManager服务是否正常。

处理步骤

登录YARN监控系统,查看用户队列资源是否有空闲。

是,执行步骤2。

否,给该用户队列扩容。若故障恢复,操作结束。若仍然无法恢复,执行步骤2。

检查ZooKeeper服务是否有报警。

是,参考报警及ZooKeeper服务异常日志进行操作。

否,执行步骤3。

重启状态异常的ResourceManager实例,查看故障是否恢复。

是,操作结束。

否,执行步骤4。

kill default队列的用户任务,查看故障是否恢复。

是,操作结束。

否,执行步骤5。

调整用户队列sla和default的并发数为200,查看故障是否恢复。

是,操作结束。

否,执行步骤6。

调整用户队列sla和default的权重比为10:3,查看故障是否恢复。

是,操作结束。

否,执行步骤7。

备份ResourceManager日志并联系开发人员进行分析。

磁盘被异常任务写满

现象/事件:

因磁盘写满导致NodeManager退服

影响范围:

主机磁盘写满,NM服务不可用

故障恢复:

kill任务恢复NodeManager服务

磁盘长时间IO带宽被打满

现象/事件

调度到该磁盘的作业运行时间会明显变长,也会引起各类超时现象

影响范围

任务超时

操作步骤

退服NM节点,待相关指标恢复正常后,再重启

NM节点因磁盘空间不足处于Unhealthy状态

现象/事件

YARN WEBUI上出现Unhealthy Nodes计数或者收到相关的Unhealthy Metrics报警

影响范围:

出现该异常的NM无法继续运行和调度作业,若大量的NM进入unhealthy状态(5%),会造成系统计算资源不足;同时任务在不同节点上反复重试,也会造成任务延迟。

故障恢复

1. 确认当前节点上除NM进程外,无其他的任务进程

2. 停掉NM服务

3. 手动清理 YARN_LOCAL_DIR 或者 YARN_LOG_DIR 目录

4. 恢复NM服务