最近望集群添加新机器,但是比较鲁莽,新机器没有进行参数调优,结果使得新添加的节点都挂掉了,辛亏及时回滚,不然影响了线上的一些数据处理任务。现在总结下当时发生的问题,以及最终的解决办法。
问题:
新加入的节点的nodemanager报出如下错误:
java.lang.OutOfMemoryError : unable to create new native Thread
解决办法:
乍一看,以为是内存溢出,是内存的原因。其实是线程数量创建超过机器的限制,导致的问题,跟内存没有关系。
修改一:
之后修改/etc/security/limits.conf中的参数,将如下内容加入:
* soft nofile 100000
* hard nofile 100000
* soft nproc 100000
* hard nproc 100000
reboot机器,没有效果。
修改二:
将如下内容加入到home目录的.bash_profile文件中。
ulimit -u 100000 -s 10240
source .bash_profile后,使用ulimit -a查看是否生效,发现修改有效果,但是集群作业依旧跑挂。
修改三:
将如下内容添加到/etc/security/limits.d/90-nproc.conf文件中。
* soft nproc 65535
这次修改完后,终于正式生效。
经过这次集群节点添加,楼主哭死的心都有了,楼主自己对linux的各个系统参数了解甚少,导致查看hadoop的log后依旧不能有效解决问题,还是求助各路大神后才解决的。所以一个好的hadoop集群运维工程师,首先是一个好的运维工程师,必须得玩转linux。

在尝试向集群添加新机器时,由于未进行参数调优,导致新节点出现故障。错误表现为nodemanager报错,最初误认为是内存溢出问题。实际是线程数量超出限制。解决方案包括修改/etc/security/limits.conf、.bash_profile和/etc/security/limits.d/90-nproc.conf文件中的参数,最终成功解决问题,强调了熟悉Linux系统参数对于Hadoop集群运维的重要性。
2648

被折叠的 条评论
为什么被折叠?



