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