2017-10-22 7 views
0
I am using Hadoop hadoop-2.6.0, while starting hadoop services unable to start secondarynamenode, datanode, nodemanager services. 
Getting Java.net.bind exceptions. 

NodeManager :하둡을 시작하는 동안 secondarynamenode, 데이터 노드, nodemanager를 시작할 수 없습니다

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 

답변

0

제공된 netstat 명령에도 해당 포트에서 수신 대기중인 프로세스의 PID가 표시됩니다. 위의 예에서

[[email protected] ~]# 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 
+0

내가 그 명령에 PID를 받고 있지 않다. netstat -ntpl | grep 50010 (모든 프로세스가 식별 될 수있는 것은 아니며 소유권이없는 프로세스 정보 은 표시되지 않습니다. 모두보기 위해서는 루트 여야합니다.) tcp 0 0 0.0.0.0:50010 0.0.0.0:* LISTEN - –

+0

이전에 난 내 우분투 시스템에 clouderamanager을 설치했습니다. 다시 나는 그것을 제거했다. –

+0

sudo를 사용할 수 있습니다. 프로세스의 PID를 볼 수 없다는 것이 아직도 사실입니까? sudo netstat -ntpl | grep 50010 – afsd

0

자주 검색 한 후/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