关于hadoop yarn主备切换,resourcemanager不能正常启动的重大事故

现象:

现象1:

运维人员最近反映一个问题:更新完黑名单列表,刷新节点的时候很慢,以前这条命令都是很快就能结束,最近执行起来没有那么丝滑了

现象2:

一次操作失误的操作导致resourceManager进程异常退出,主动进行的主备切换失败,于是手动强制指定active节点,结果仍然没有成功。
这个时候获取节点状态的时候,发现备节点正常,于是重启RM,手动指定另外一台原本好的那个备节点当主,还是启动失败。
log 都也不打了,这时候,从现象上来看,不管谁来都是两眼一黑。。。。。

原因:

黑名单的节点数过多,导致加载时间过长(亲测一秒能加载35条黑名单记录,加入你有一万条记录,需要五分钟的时间,如果是线上的环境,在不知情的情况下你敢等五分钟吗?我打赌这五分钟的时间你已经尝试过重启好几次了)

为什么加载时间过长?

这里加载时间长并不是读取exclude文件的内容慢,而是每一条记录都需要通过节点的hostname获取其IP<暂且叫它测试节点的连通性>,这个我们内网的速度一般是30毫秒作业。这里是个for循环遍历,可以认为是串行执行
加载时间与记录数大概是这样的
黑名单记录条数 | 花费时间(秒)
10000 | 336
5000 | 158
3000 | 16
1000 | 4

整改方案

yarn 本身:

加载黑名单没有必要验证节点是否可达,从代码里去掉验证的部分

运维角度:

尽量保证黑名单列表精简,通过定时任务及时移除失效的黑名单记录

涉及到的代码

复制这行代码所属的方法hadoop 3.3.6 ,然后换个名字假设叫isUntrackedNodeWithoutParseHostnameToIP把resolver调用这行注释掉
在原函数isUntrackedNode调用的地方改成isUntrackedNodeWithoutParseHostnameToIP即可,其实这个函数调用在这里isUntrackedNode,其他逻辑不变。

修改完成以后让你的系统主备切瞬间脉动回来

解决问题的思路

不管什么问题,最重要的是解题思路,只要思路对了,问题总能解决!
其实就是启动完以后log不打了,只能看jstack看栈信息,在哪里block或者WAITTING了不得不说我一开始也是瞎猜的是不是卡在了黑名单加载的过程中了,正好看nodesListManager线程正在WAITTING,然后在加载黑名单的地方加了log来证实我的猜测,的确是一直卡在了for循环遍历的地方。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值