Standby NameNode 실행하기

Hadoop에서 이중화 구성으로 운영하는 도중 Standby NameNode 등에 문제가 발생하여 새로운 서버로 교체해야 하거나, 디스크를 아예 교체해야 하는 상황이 발생할 수 있습니다.  Hadoop NameNode 이중화 구성 시 장애에 대한 내용은 다음글 참고하세요.

이렇게 새로운 하드웨어 또는 디스크에 Standby NameNode를 다음과 같은 명령으로 실행하면 예외가 발생하며 실행되지 않습니다.

1
2
3
4
5
6
7
8
9
10
11
12
[~/hadoop_home]$ sbin/hadoop-daemon.sh start namenode
2016-09-09 01:42:44,915 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
java.io.IOException: NameNode is not formatted.
        at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:225)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:975)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:681)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:584)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:644)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:811)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:795)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1488)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1554)

이 경우 다음과 같은 절차로 Standby NameNode를 실행해야 합니다.

fsimage 파일 복사

다음 명령을 이용하여 fsimage 파일을 복사하는데, 주의사항은 이 명령은 반드시 새로 추가된 Standby NameNode에서 실행해야 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[~/hadoop_home]$ bin/hdfs namenode -bootstrapStandby
=====================================================
About to bootstrap Standby ID nn2 from:
           Nameservice ID: jpdata
        Other Namenode ID: nn1
  Other NN's HTTP address: http://host01:50070
  Other NN's IPC  address: host01/1.1.1.1:8020
             Namespace ID: 1190188686
            Block pool ID: BP-1405175350-1.1.1.1-1456105236714
               Cluster ID: CID-006286ae-6f3b-42f0-9c63-e749f8280b08
           Layout version: -63
       isUpgradeFinalized: true
=====================================================
16/09/09 01:45:03 INFO common.Storage: Storage directory /xxxx/filesystem has been successfully formatted.
16/09/09 01:45:07 INFO namenode.TransferFsImage: Opening connection to http://host01:50070/imagetransfer?getimage=1&txid=0&storageInfo=-63:1190188686:0:CID-006286ae-6f3b-42f0-9c63-e749f8280b08
16/09/09 02:03:20 INFO namenode.TransferFsImage: Image Transfer timeout configured to 60000 milliseconds
16/09/09 02:03:20 INFO namenode.TransferFsImage: Transfer took 0.00s at 0.00 KB/s
16/09/09 02:03:20 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000000000000000 size 353 bytes.
16/09/09 02:03:20 INFO util.ExitUtil: Exiting with status 0
16/09/09 02:03:20 INFO namenode.NameNode: SHUTDOWN_MSG:

위 명령은 NameNode를 실행하는 명령이 아니라 단순히 fsimage 파일을 Active NameNode로 부터 복사하는 과정입니다. 로그 중에 보면 "http://host01:50070/imagetransfer?getimage=" 이런 부분이 있는데 fsimage 파일 복사를 Active NameNode의 웹 포트인 50070 포트로 download 요청을 보내고 이 response 를 받아서 저장합니다.

Standby NameNode 실행

정상적으로 fsimage 파일이 저장이 되었으면 다음 명령을 실행하여 Standby NameNode를 실행합니다.

1
[~/hadoop_home]$ sbin/hadoop-daemon.start start namenode

ZKFailoverController 실행

ZKFailoverController는 ZooKeeper와 통신을 하면서 NameNode의 상태 정보를 관리하는 기능을 수행하는 데몬이기 때문에 NameNode 실행 후 반드시 이 데몬도 실행을 해야 합니다. 실행은 다음 명령으로 합니다.

1
[~/hadoop_home]$ sbin/hadoop-daemon.start start zkfc

NameNode 상태 확인

최종적으로 다음 명령을 실행하여 NameNode의 상태를 확인합니다.

1
2
3
4
[~/hadoop_home]$ bin/hdfs haadmin -getServiceState nn2
standby
[~/hadoop_home]$ bin/hdfs haadmin -getServiceState nn1
active

Popit은 페이스북 댓글만 사용하고 있습니다. 페이스북 로그인 후 글을 보시면 댓글이 나타납니다.