본문 바로가기
Data/Data Engineering & Analystics

[ERROR] Hadoop Datanode 실행 안됨Initialization failed for Block pool <registering> 0. Exiting

by DenverAlmighty 2022. 11. 20.

실행 환경

OS : Redhat8
Hadoop Version : 3.3.4

ERROR

start-dfs.sh를 실행하면 Namenode 만 실행되고 Datanode는 올라오지 않는다.

로그

로그는 /logs/hadoop-xxxx-datanode-xxxxx.internal.log를 확인하면 된다.

tail -100 <HADOOP_HOME>/logs/hadoop-ec2-user-datanode-ip-10-0-0-188.ap-northeast-2.compute.internal.log
2022-11-20 07:36:33,880 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid 2177b52c-9923-4d6b-9c08-301b37833c62) service to localhost/127.0.0.1:9000. Exiting.
java.io.IOException: All specified directories have failed to load.
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:560)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1753)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1689)
    at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:392)
    at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:288)
    at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:830)
    at java.lang.Thread.run(Thread.java:750)
2022-11-20 07:36:33,880 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service for: Block pool <registering> (Datanode Uuid 2177b52c-9923-4d6b-9c08-301b37833c62) service to localhost/127.0.0.1:9000

원인

최초 설치가 아니고 사용중에 namenode를 포맷하면서 namenode; location=null? 을 물어볼 때 Y를 선택해서 오류가 난 것이다.

사용중에 namenode를 포맷해야한다면
hdfs/datanode, hdfs/namenode 디렉토리를 삭제, 재생성 후 namenode -format을 해야한다.

Re-format filesystem in Storage Directory root= /home/ec2-user/project/sw/hadoop_store/hdfs/namenode; location= null ? (Y or N)

해결 방법

방법 1) clusterID 변경

cat <HADOOP_STORE>/hdfs/namenode/current/VERSION
cat <HADOOP_STORE>/hdfs/datanode/current/VERSION

datanode와 namenode에 clusterID가 서로 다르다.
먼저 프로세스를 죽이고,
namenode의 clusterID를 datanode에 복붙하고 start-dfs.sh를 실행하면 정상적으로 올라온다.

방법 2) hdfs/datanode, hdfs/namenode 디렉토리 재생성

hdfs/datanode, hdfs/namenode 디렉토리를 지우고 다시 생성한다.

rm -rf hdfs/namenode
rm -rf hdfs/datanode
mkdir hdfs/namenode
mkdir hdfs/datanode

star-dfs.sh