启动hadoop时无法启动secondarynamenode、datanode、nodemanager

Unable to start secondarynamenode, datanode, nodemanager while starting hadoop

I am using Hadoop hadoop-2.6.0, while starting hadoop services unable to start secondarynamenode, datanode, nodemanager services.
Getting Java.net.bind exceptions.

节点管理器:

org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.net.BindException: Problem binding to [0.0.0.0:8040] java.net.BindException: Address already in use; For more details see:  http://wiki.apache.org/hadoop/BindException
    at org.apache.hadoop.yarn.factories.impl.pb.RpcServerFactoryPBImpl.getServer(RpcServerFactoryPBImpl.java:139)
    at org.apache.hadoop.yarn.ipc.HadoopYarnProtoRPC.getServer(HadoopYarnProtoRPC.java:65)
    at org.apache.hadoop.yarn.ipc.YarnRPC.getServer(YarnRPC.java:54)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceLocalizationService.createServer(ResourceLocalizationService.java:356)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceLocalizationService.serviceStar

名称节点:

2017-10-10 23:58:07,872 INFO org.apache.hadoop.http.HttpServer2: HttpServer.start() threw a non Bind IOException
java.net.BindException: Port in use: 0.0.0.0:50090
    at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:891)
    at org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:827)
    at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.initialize(SecondaryNameNode.java:276)
    at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.<init>(SecondaryNameNode.java:192)
    at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.main(SecondaryNameNode.java:671)

数据节点:

java.net.BindException: Problem binding to [0.0.0.0:50010] java.net.BindException: Address already in use; For more details see:  http://wiki.apache.org/hadoop/BindException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

在尝试 netstat -ntpl 命令时,以下端口已在使用中

tcp        0      0 0.0.0.0:50010           0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:50090           0.0.0.0:*               LISTEN      -             
tcp6       0      0 :::8040                 :::*                    LISTEN      -           

请有人建议我如何关闭这些端口来解决这个问题。

:~/hadoopinstall/hadoop-2.6.0$ jps
18255 org.eclipse.equinox.launcher_1.3.0.dist.jar
27492 RunJar
12387 Jps
11951 ResourceManager
11469 NameNode

您提供的 netstat 命令还显示了正在侦听该端口的进程的 PID。

例如

[root@dn1 ~]# netstat -ntpl | grep 50010
tcp        0      0 0.0.0.0:50010           0.0.0.0:*               LISTEN      1093/java

在上面的例子中,1093是绑定50010端口的java进程的PID。

您可以很容易地检查是什么进程运行,如果您有正确的权限,您也可以使用命令终止进程。

kill -9 1093

经过频繁 searches/tries 我找到了在没有 pid 的情况下终止进程(端口)的解决方案。

*******@127:~$ sudo fuser -k 50010/tcp
[sudo] password for muralee1857: 
50010/tcp:            1514
*******@127:~$ sudo kill -9 $(lsof -t -i:50010)
*******@127:~$ sudo fuser -k 50010/tcp
*******@127:~$ sudo kill -9 $(lsof -t -i:50090)
*******@127:~$ sudo fuser -k 50090/tcp
50090/tcp:            2110
*******@127:~$ sudo kill -9 $(lsof -t -i:50090)
*******@127:~$ sudo fuser -k 50090/tcp
*******@127:~$ sudo fuser -k 8040/tcp
8040/tcp:             2304
*******@127:~$ sudo kill -9 $(lsof -t -i:8040)
*******@127:~$ sudo fuser -k 8040/tcp

现在我可以启动所有hadoop服务了。

/hadoopinstall/hadoop-2.6.0$ jps
6844 NodeManager
7150 Jps
6547 SecondaryNameNode
6202 NameNode
6702 ResourceManager
6358 DataNode