안전 모드 동작 원리 분석
1.1 서비스 개별 시작을 통한 현상 재현
모든 Hadoop 서비스를 중지한 후, 각 프로세스를 수동으로 실행하며 안전 모드의 동작을 확인할 수 있다.
stop-all.sh
jps
hdfs --daemon start namenode
jps
NameNode만 실행된 상태에서 파일 시스템 조회는 가능하지만, 데이터 조작 작업은 제한된다.
hadoop fs -ls / # 정상적으로 디렉토리 목록 출력
hadoop fs -cat /test.txt # 읽기 작업도 일부 환경에선 실패 가능
hadoop fs -mkdir /hello # 오류 발생
결과 예시:
mkdir: Cannot create directory /hello. Name node is in safe mode.
1.2 Web UI를 통한 상태 확인
NameNode 웹 대시보드(Summary 탭)에서 다음과 같은 메시지를 확인할 수 있다:
The reported blocks 0 needs additional 2 blocks to reach the threshold 0.9990 of total blocks 3
이 메시지는 현재 블록 보고가 부족하여 안전 모드가 유지되고 있음을 의미한다.
1.3 DataNode 시작 후 변화 관찰
하나의 DataNode를 추가로 기동한다:
hdfs --daemon start datanode
웹 콘솔을 새로 고침하면, 블록 보고 비율이 증가하고 안전 모드가 자동 해제되는 것을 확인할 수 있다.
이후 파일 시스템 변경 작업이 정상 수행됨:
hadoop fs -mkdir /hello # 성공
안전 모드 개념 설명
- NameNode 시작 시, HDFS는 초기화 과정에서 일시적으로 안전 모드(Safe Mode)에 진입한다.
- 이 단계에서는 fsimage와 edits 로그를 기반으로 파일 시스템 메타데이터를 복구하고, DataNode로부터 블록 상태를 수집한다.
- 안전 모드 중에는 읽기(read-only) 작업만 허용되며, 파일 생성, 삭제, 수정 등의 쓰기 요청은 거부된다.
- DataNode들이 자신의 보유 블록을 NameNode에 보고(reporting)하면서, 시스템 전체의 블록 가용률이 설정된 기준치를 넘기면 안전 모드가 자동으로 종료된다.
자동 해제 조건과 설정 파라미터
다음은 hdfs-site.xml에서 관리하는 주요 설정 항목이다:
| 설정 키 | 기본값 | 설명 |
|---|---|---|
| dfs.replication | 3 | HDFS 파일 블록의 기본 복제 계수 |
| dfs.replication.max | 512 | 허용되는 최대 복제 수 |
| dfs.namenode.replication.min | 1 | 유효한 블록으로 간주하기 위한 최소 복제 수 |
| dfs.namenode.safemode.threshold-pct | 0.999 | 안전 모드 해제를 위한 블록 보고 임계 비율 (99.9%) |
| dfs.namenode.safemode.min.datanodes | 0 | 안전 모드 해제 전 최소 활성 DataNode 수 |
| dfs.namenode.safemode.extension | 30000(ms) | 임계 조건 달성 후 추가 대기 시간. 이 기간 동안 조건 유지 시 모드 종료 |
주의: threshold-pct 값이 1보다 크면 안전 모드가 영구적으로 유지되며, 0 이하일 경우 블록 보고를 기다리지 않고 즉시 해제된다.
수동 제어 명령어
관리자가 직접 안전 모드 상태를 제어할 수 있는 CLI 명령:
hdfs dfsadmin -safemode get # 현재 모드 상태 확인 (ON/OFF)
hdfs dfsadmin -safemode enter # 강제로 안전 모드 진입
hdfs dfsadmin -safemode leave # 안전 모드 수동 해제
hdfs dfsadmin -safemode wait # 안전 모드가 될 때까지 블록킹(스크립트에서 유용)
enter는 즉시 진입시키며, wait는 현재 모드 도달을 대기하는 차이가 있다. 자동 조건이 만족되지 않을 경우 수동으로 leave를 사용해 강제 해제할 수 있으나, 데이터 무결성에 주의해야 한다.