반응형
네임노드 시작 과정
- fsimage를 메모리에 로딩
- editlog를 읽어 fsimage에 반영 (체크포인팅)
- 데이터노드가 블록리포트를 보내줌
- safemode에 진입하고, 데이터노드가 보내준 블록리포트 정보를 토대로 블록 복제수가 일정 수준까지 만족했는지 확인한다.
- 만족했으면 safemode에서 빠져나온다.
- ...
아래 글에 네임노드 시작과정을 자세하게 정리해두었다.
네임노드 SafeMode 시
- HDFS 읽기는 가능하다.
- HDFS 쓰기가 불가능하다.
네임노드 SafeMode는 언제 켜질까?
1) 네임노드를 시작할 때
- 블록 복제수가 일정 수준(dfs.namenode.safemode.threshold-pct = 0.999f)을 만족하는지 확인 되어야 safemode를 빠져나온다. 예를 들어 전체 블록수가 900개(300*3)라고 해보자. 그러면 블록 복제수가 900개 x 0.999f 개가 있다는 것이 확인 되어야 safemode를 빠져나온다는 뜻이다.
- 그러나,데이터노드가 블록리포트를 보내주지 않는다면? 혹은 블록리포트를 보내주는데 오래 걸린다면?
- 네임노드는 블록 복제수를 확인할 수가 없게 된다. 그러니 블록 복제수가 900개 x 0.999f 를 만족한다고 확인이 되지 않아 계속 safemode에 머물게 될 것이다.
2) 네임노드 디스크 공간이 부족할 때
네임노드는 dfs.namenode.name.dir 로 설정된 경로(로컬 디스크)에 메타데이터(fsimage, edits log 등)를 저장한다. dfs.namenode.du.reserved 로 설정한 여유용량(디폴트 100MB)이 남아 있지 않다면 safemode에 진입한다.
이 경우, 네임노드 디스크 공간을 확보한 후에 safemode에서 빠져나와야 한다.
sudo -uhdfs hadoop dfsadmin -safemode leave
3) 관리자가 SafeMode를 켤 때
하둡 쓰기 작업을 멈추고 유지보수 작업을 하고 싶은 경우 관리자가 수동으로 safemode를 켤 수 있다.
sudo -uhdfs hadoop dfsadmin -safemode enter
현재 safemode 상태를 확인할 수도 있다.
sudo -uhdfs hadoop dfsadmin -safemode get
유지보수 작업을 마친 후에는 직접 safemode에서 빠져나오도록 한다.
sudo -uhdfs hadoop dfsadmin -safemode leave
네임노드가 계속 safemode에 있다면? (Name node is in safe mode)
> 네임노드를 시작하는 과정에서 safemode에 계속 있는 경우
/
- 데이터노드들이 제대로 구동됐는지 확인한다. 데이터노드들이 꺼져 있다면 블록리포트를 보낼 수 없다. 그러면 네임노드는 블록 복제수를 확인할 방법이 없다. 데이터노드들이 블록복제수 확인에 필요한 블록리포트를 보내주기 때문이다.
/
- 데이터노드들이 제대로 구동됐지만 블록리포트를 보내는데 오래 걸릴 수도 있다. 블록 개수가 많을 수록 그렇겠지?어차피 강제로 safemode를 꺼도 데이터노드가 블록리포트를 모두 보내준 상태가 아니기 때문에 under-replicated 블록이 많다고 뜰 것이다. 그러면 쓸 데 없이 블록 복제를 하게 될 것이다. (데이터노드에 블록이 있는데 아직 블록리포트를 받지 못해 네임노드는 블록 복제본이 없다고 인식하기 때문에)
- 그러니 일단 블록리포트를 다 받을 때까지 기다려보자.
/
- 데이터노드에게 블록리포트도 다 받은 거 같은데 아직도 safemode라면? 그러면 블록이 일정 수준(dfs.namenode.safemode.threshold-pct = 0.999f)보다 복제가 덜 된 것이다. 이 경우 safemode를 끄자. 어차피 safemode에서 빠져나오면 부족한 블록(under-replicated block)이 알아서 복제되기 때문이다.
- safemode를 껐는데 missing block이 발견될 수도 있다. 어떤 블록은 복제본 3개가 모두 없는 경우인 것이다. 이건 어찌할 도리가 없다. 데이터 유실이다. missing block이 어떤 데이터인지 파악하여 데이터를 다시 수집해야 한다.
> 네임노드가 이미 구동중이었는데 safemode가 된 경우
- 네임노드의 디스크 공간이 부족한 것이 원인일 가능성이 크다. (/var/log/hadoop-hdfs/hadoop-hdfs-namenode-~.log 로그파일 확인해볼 것)
- 네임노드의 디스크 공간(dfs.namenode.name.dir)을 추가로 확보한 후에 dfsadmin 명령어를 사용하여 safemode에서 직접 빠져나온다.
참고링크
정말 정말 정리 잘 되어 있는 네임노드 구동과정
반응형
'BigData 기술 > Hadoop' 카테고리의 다른 글
[HDFS] 하둡 Balancer 과정 (1060) | 2020.07.20 |
---|---|
[HDFS] Rack Awareness 란 (911) | 2020.07.15 |
[YARN] 필수개념 (4) | 2019.10.30 |
[HDFS] 데이터노드 추가/삭제/디스크고장 조치 (4) | 2019.10.30 |
HDFS 주요 개념 - 네임노드, 데이터노드 (2) | 2019.10.28 |
댓글