1. 程式人生 > 其它 >華為雲ECS上搭建Hadoop叢集環境啟動時報錯“java.net.BindException: Cannot assign requested address”問題的解決

華為雲ECS上搭建Hadoop叢集環境啟動時報錯“java.net.BindException: Cannot assign requested address”問題的解決

啟動時使用:

./sbin/start-all.sh
1
報錯:

java.net.BindException: Problem binding to [test7972:9000] java.net.BindException: Cannot assign requested address; For more details see: http://wiki.apache.org/hadoop/BindException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:824)
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:735)
at org.apache.hadoop.ipc.Server.bind(Server.java:561)
at org.apache.hadoop.ipc.ServerL i s t e n e r . < i n i t > ( S e r v e r . j a v a : 1037 ) a t o r g . a p a c h e . h a d o o p . i p c . S e r v e r . < i n i t > ( S e r v e r . j a v a : 2738 ) a t o r g . a p a c h e . h a d o o p . i p c . R P C Listener.(Server.java:1037) at org.apache.hadoop.ipc.Server.(Server.java:2738) at org.apache.hadoop.ipc.RPCListener.(Server.java:1037)atorg.apache.hadoop.ipc.Server.(Server.java:2738)atorg.apache.hadoop.ipc.RPCServer.(RPC.java:958)
at org.apache.hadoop.ipc.ProtobufRpcEngineS e r v e r . < i n i t > ( P r o t o b u f R p c E n g i n e . j a v a : 420 ) a t o r g . a p a c h e . h a d o o p . i p c . P r o t o b u f R p c E n g i n e . g e t S e r v e r ( P r o t o b u f R p c E n g i n e . j a v a : 341 ) a t o r g . a p a c h e . h a d o o p . i p c . R P C Server.(ProtobufRpcEngine.java:420) at org.apache.hadoop.ipc.ProtobufRpcEngine.getServer(ProtobufRpcEngine.java:341) at org.apache.hadoop.ipc.RPCServer.(ProtobufRpcEngine.java:420)atorg.apache.hadoop.ipc.ProtobufRpcEngine.getServer(ProtobufRpcEngine.java:341)atorg.apache.hadoop.ipc.RPCBuilder.build(RPC.java:800)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.(NameNodeRpcServer.java:431)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createRpcServer(NameNode.java:803)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:730)
at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:953)
at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:932)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1673)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1741)
Caused by: java.net.BindException: Cannot assign requested address
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.apache.hadoop.ipc.Server.bind(Server.java:544)
… 13 more

這裡要注意: 這個錯誤是伺服器ip識別問題造成的,在檔案:

/etc/hosts

中設定ip與域名的匹配時:

1.在本機上的操作,都要設定成內網ip
2.其它機器上的操作,要設定成外網ip
那麼具體的解決辦法就是:

1.在Master伺服器上,要將自己的ip設定成內網ip,而將另一臺Slave伺服器的ip設定成外網ip;
2.同樣的在Slave伺服器上,要將自己的ip設定成內網ip,而將另一臺Master伺服器的ip設定成外網ip。
這個問題確實有點棘手,之前我也沒有想到是運營商伺服器自身的網路問題,以後使用公有云搭建Hadoop叢集要注意了!一方面要考慮系統間的互動速度,使用內網地址;另一方面還要考慮公有云自身與外界連線,使用外網地址;除此之外公有云運營商的網路規則我們是不清楚的,內網和外網之間有什麼限制、規則我們不清楚。這些共同造成了這個問題的出現。

更多內容及Java+大資料個人原創視訊,可關注公眾號觀看:

原創文章,轉載請註明出處!!