Hadoop BindException
Hadoop
节点daemon无法启动,报BindException
,启动日志如下:
2018-03-12 10:16:56,057 INFO org.apache.hadoop.http.HttpServer2: HttpServer.start() threw a non Bind IOException
java.net.BindException: Port in use: node-01:50070
at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:940)
at org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:876)
at org.apache.hadoop.hdfs.server.namenode.NameNodeHttpServer.start(NameNodeHttpServer.java:142)
at org.apache.hadoop.hdfs.server.namenode.NameNode.startHttpServer(NameNode.java:760)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:639)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:819)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:803)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1500)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1566)
Caused by: java.net.BindException: Address already in use
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.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:216)
at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:934)
... 8 more
通过查看namenode启动日志发现端口被占用,通过lsof
命令查看端口,显示并未占用
lsof
查看端口使用情况
lsof -i:50070
但通过netstat
命令却显示端口被pid为:22266
的进程占用了
netstat
命令查看端口号使用情况
netstat -nap | grep 50070
因为lsof
有权限控制,只能看到本用户,而netstat无权限控制。因此可以判断其他用户某个应用占用该端口号。通过ps -aux | grep
命令查看pid为22266
的进程发现该节点Hadoop的daemons
使用root
用户启动,所以通过普通管理账户启动不成功,报端口占用异常。
- 查看具体进程信息
ps -aux | grep 22266
解决方案
kill
掉root
用户Hadoop
所有实例进程,然后再在原定的用户上启动Hadoop
节点daemon
总结
本文发生的端口BindException
,主要还是误操作导致,在sudo
命令或者在root
用户下启动Hadoop节点daemon
。当然遇到端口占用情况,也有可能真的是被其他应用占用了,需要根据日志进行一一排查。