更新时间:2024-05-28 GMT+08:00

ResourceManager持续主备倒换

问题

RM(ResourceManager)在多个任务(比如2000个任务)正常并发运行时出现持续的主备倒换,导致YARN服务不可用。

回答

产生上述问题的原因是,full GC(GabageCollection)时间过长,超出了RM与ZK(ZooKeeper)之间定期交互时长的阈值,导致RM与ZK失联,从而造成RM主备倒换。

在多任务情况下,RM需要保存多个任务的鉴权信息,并通过心跳传递给各个NM(NodeManager),即心跳Response。心跳Response的生命周期短,默认值为1s,一般可以在JVM minor GC时被回收,但在多任务的情况下,集群规模较大,比如5000节点,多个节点的心跳Response会占用大量内存,导致JVM在minor GC时无法完全回收,无法回收的内存持续累积,最终触发JVM的full GC。JVM的GC都是阻塞式的,即在GC过程中不执行任何作业,所以如果full GC的时间过长,超出了RM与ZK之间定期交互时长的阈值,就会出现主备倒换。

登录FusionInsight Manager,选择“集群 > 服务 > Yarn > 配置 > 全部配置”,在左侧选择“Yarn > 自定义”,在“yarn.yarn-site.customized.configs”中添加“yarn.resourcemanager.zk-timeout-ms”参数来增大RM与ZK之间定期交互时长的阈值(参数值的范围为小于等于90000毫秒),可以解决RM持续主备倒换的问题。