您好,登錄后才能下訂單哦!
本篇內容介紹了“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節點后報錯怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。