Hadoop SafeMode

snooby·2022년 12월 6일
1
post-thumbnail

네임노드 과정

네임노드가 시작 시, 진행되는 과정은 다음과 같습니다.

  • fsimage를 메모리에 로딩
  • editlog를 읽어 fsimage에 반영 (체크포인팅)
  • 데이터노드가 블록리포트를 보내줌
  • safemode에 진입하고, 데이터노드가 보내준 블록리포트 정보를 토대로 블록 복제수가 일정 수준까지 만족했는지 확인한다.
  • 만족했으면 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

profile
DevOps 🐥

0개의 댓글