一、背景
今天又碰见了一个很鬼的问题,yarn的ui上nodemanager都是active,而且资源也完全充足,但是我提交任务的时候就卡主了!而且是什么类型的任务都提交不了,相当于yarn的服务直接不可用,关键是什么参数都没有修改,也没有重启yarn服务,突然他就不行了
二、查问题
所以我第一反应是查看resourcemanager的日志(记得要查看active的那台)
结果我看到了
ERROR org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore: State store operation failed
(具体报错我没有保存)
但是报错和如下文章的异常是一样的
ZooKeeper节点数据量限制引起的Hadoop YARN ResourceManager崩溃原因分析:https://my.oschina.net/dabird/blog/3023781
我发现是resourcemanager去连接zookeeper出的问题,然后我又去翻zookeeper的日志
Exception causing close of session XXXXX due to java.io.IOException: Len error 这是一个大于1M的值 2021-xx-xx xx:xx:xx,xxx [myid:1] - INFO Closed socket connection for client /ip:端口 which had sessionid XXXXX
三、解决方案
我觉得他解决方案说的很清楚,就是要在zookeeper的服务端和resourcemanager(客户端)都添加上jute.maxbuffer这个参数
但是这篇文档里面说了resourcemanager如何配置这个参数,没有说明白zk服务端如何配置,所以我又百度了另一篇文章
Zookeeper 服务器端和客户端扩大节点数据1M大小限制:https://blog.csdn.net/zyq_2014/article/details/85948902
修改zkServer.sh 先添加一个变量,然后认真读下zk的这个脚本!!!
你只在上面写了变量,是不生效的
要在实际启动的时候,添加上这个参数!(很重要,否则不生效!)
所以,请看下zk里面的报错,他会有一段Len xxxx,看看那个值是多少,然后两边设置的值都大于那个值就可以!
三、总结
然后重启了resourcemanager和zookeeper,问题就解决了,所以其实当遇到一些很奇怪的问题的时候,记得去看对应组件或者对应服务的日志!
最后还是万分感谢那些遇到问题,认真解决还会总结出来的大神们,因为有他们,我们才可以少踩坑,能站在巨人的肩膀上,我很荣幸!
菜鸡一只,努力学习ing!~