Cloudera Manager 의 Upgrade HDFS Metadata 명령을 중간에 취소하면 NameNode 가 반쯤 업그레이드된 상태로 남아 일반 기동도 재시도도 되지 않는 교착에 빠진다. 레이아웃 버전이 어긋나고 previous.tmp 가 남기 때문이다. Cloudera Manager 에서 명령을 취소해도 NameNode 프로세스 쪽 작업은 별개로 진행되므로, 관리 도구의 상태와 디스크 상태가 어긋나는 것이 교착의 실체다.
NameNode 로그에 레이아웃 버전 불일치가 찍힌다.
File system image contains an old layout version -55.
An upgrade to version -59 is required.
Please restart NameNode with the '-rollingUpgrade started' option
or restart NameNode with the '-upgrade' option to start a new upgrade.
중단 잔여물 때문에 다음이 뜨기도 한다.
InconsistentFSStateException: Directory /.../namenode is in an inconsistent state:
previous fs state should not exist during upgrade. Finalize or rollback first.
업그레이드 위저드가 HDFS Start 명령의 "Wait for NameNode(s) to begin responding to RPCs" 단계에서 멈추는 형태로도 나타난다. 일부 NameNode 는 수 초 만에 응답하는데 한 대만 무한 대기하면, 화면은 멈춘 것처럼 보이지만 실제로는 JournalNode 쿼럼을 얻지 못해 진행하지 못하는 경우가 많다. JournalNode 쪽이 함께 꼬이면 recoverUnfinalizedSegments failed ... Timed out waiting 120000ms for a quorum 이 나온다.
무엇을 하기 전에 백업이 먼저다.
dfs.namenode.name.dir 전체를 tar 로 백업한다. 각 디렉터리는 완전한 사본이므로 하나만 백업해도 된다. dfs.journalnode.edits.dir 도 함께 백업한다.nn/current 아래 VERSION 의 layoutVersion 을 확인하고 previous 와 previous.tmp 존재 여부를 본다. *.lock 파일이 있으면 NameNode 프로세스가 아직 살아 있다는 뜻이므로 프로세스부터 정리한다.hdfs namenode -bootstrapStandby 로 재구성한다.previous 디렉터리를 임의로 지우면 롤백 경로가 사라진다. 롤백을 고려 중이면 손대지 않는다.