hadoop2.7集群,新增datanode节点后报错的解决思路

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

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

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

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

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 threadide

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

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

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

        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 ,此次再也不报错了。能够正常执行结束。

相关文章
相关标签/搜索