温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

hadoop2.7集群新增datanode节点后报错怎么解决

发布时间:2021-09-01 18:16:00 来源:亿速云 阅读:223 作者:chen 栏目:云计算

本篇内容介绍了“hadoop2.7集群新增datanode节点后报错怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

我们的hadoop是2.7版本的,取得当时最新的版本,唉,不稳定呀,中间波折好多。

当前集群是1个namenode,4个datanode。服务器是虚拟机,配置太差,需要增加节点。

悲催的hadoop集群,我同时增加了3个datanode节点,原来集群有4个数据节点,可能因为加的太多了,执行balancer的时候,很快将服务器资源耗尽了。

查了一下,服务器上设置了进程最大个数是1024个,而balancer在执行的时候会启动native进程,因为需要执行的balance操作太多,集群会不断的启动本地进程,将进程数耗尽。连ps 命令都不好使了,幸好我之前记下了balancer的进程号,终于kill掉。出错信息日志如下:

2015-09-11 20:04:11,175 WARN org.apache.hadoop.hdfs.LeaseRenewer: Failed to renew lease for [DFSClient_NONMAPREDUCE_880883068_1] for 73 seconds.  Will retry shortly ...

java.io.IOException: com.google.protobuf.ServiceException: java.lang.OutOfMemoryError: unable to create new native thread

        at org.apache.hadoop.ipc.ProtobufHelper.getRemoteException(ProtobufHelper.java:47)

        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.renewLease(ClientNamenodeProtocolTranslatorPB.java:592)

        at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:606)

        at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)

        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)

        at com.sun.proxy.$Proxy12.renewLease(Unknown Source)

        at org.apache.hadoop.hdfs.DFSClient.renewLease(DFSClient.java:891)

        at org.apache.hadoop.hdfs.LeaseRenewer.renew(LeaseRenewer.java:417)

        at org.apache.hadoop.hdfs.LeaseRenewer.run(LeaseRenewer.java:442)

        at org.apache.hadoop.hdfs.LeaseRenewer.access$700(LeaseRenewer.java:71)

        at org.apache.hadoop.hdfs.LeaseRenewer$1.run(LeaseRenewer.java:298)

        at java.lang.Thread.run(Thread.java:745)

Caused by: com.google.protobuf.ServiceException: java.lang.OutOfMemoryError: unable to create new native thread

        at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:243)

        at com.sun.proxy.$Proxy11.renewLease(Unknown Source)

        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.renewLease(ClientNamenodeProtocolTranslatorPB.java:590)

        ... 12 more

Caused by: java.lang.OutOfMemoryError: unable to create new native thread

        at java.lang.Thread.start0(Native Method)

        at java.lang.Thread.start(Thread.java:714)

        at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:949)

        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1371)

        at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:110)

        at org.apache.hadoop.ipc.Client$Connection.sendRpcRequest(Client.java:1022)

        at org.apache.hadoop.ipc.Client.call(Client.java:1449)

        at org.apache.hadoop.ipc.Client.call(Client.java:1407)

        at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)

        ... 14 more

思路一:尝试了调整balancer的threshold,据网上说,该值是0~100。按照90、80、70、50、30、10的顺序执行,这样一点一点的balance,会不会好一点,实际使用后,发现大于10的一律不好使,所以这个方法也行不通了。失败!

思路二:是否是因为突然间增加了三个节点,hadoop的后台balancer的内容太多(当前数据量是370G,绝大多数都是hbase文件)。那我就一个节点一个节点的增加,会不会好一点?于是,我又把三台中的两台的节点去掉了,只剩下一台后,执行balancer。好吧,刚开始以为可行,结果跑了大概几分钟之后,同样的问题又出现了。。。失败!

后来发现新加的主机和原有的hadoop的主机时区设置不一样,改为中国上海时区后,还是出下面的问题。不过时区设置肯定要设置的,算是提前避免了另外一个隐藏的问题吧。

思路三:由于服务器使用的是vm,配置不是很高,所以一直不想改系统参数来调优,如果把参数值调高,linux的使用效率增加,同时也可能这个vm主机承受不住,造成系统宕机。但是没办法了,执行ulimit -a,查看结果中的“max user processes              (-u) 1024”,

执行vi /etc/security/limits.d/90-nproc.conf,修改将1024改为5120,保存退出即可。


# Default limit for number of user's processes to prevent

# accidental fork bombs.

# See rhbz #432903 for reasoning.


*          soft    nproc     1024

root       soft    nproc     unlimited


然后执行start-balancer.sh threshold 5 ,这次不再报错了。可以正常执行结束。

“hadoop2.7集群新增datanode节点后报错怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI