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。当然遇到端口占用情况,也有可能真的是被其他应用占用了,需要根据日志进行一一排查。
本文解决Hadoop启动时出现的BindException问题,详细分析了日志中提示的端口冲突原因,并提供了如何查找真正占用端口的进程及解决办法。
874

被折叠的 条评论
为什么被折叠?



