본문 바로가기
BigData/Hadoop

Hadoop Safe-Mode란?

by Tomining 2017. 6. 15.
HDFS를 재시작하다 보면 간혹 Namenode is safe mode라는 메시지를 접할 때가 있다.
보통 비정상적으로 종료될 때 발생하는 것으로 알고 있는데, 꼭 그런 것만은 아닌 것 같다.

먼저 Safe-Mode를 알기 위해서는 네임노드가 start 되는 과정을 알아야 한다.
  1. fsimage 로딩
  2. editlog 증분 로딩 <-- Read 가능 시점
  3. 데이터노드로부터 받은 블록 정보를 로딩된 정보와 비교(Block Reporting)
네임노드가 3번 작업이 진행되는 동안 네임노드는 safe mode에 있다고 한다. 3번이 완료되면 safe mode를 벗어나 Write가 가능한 시점이 되는데, 완료되기 전 dfsadmin command를 통해서 safe mode에서 나올 수도 있다.(강제로 Safe-Mode를 벗어나면 문제가 있을 수도 있지 않을까 생각한다.)

"Hadoop The Definitive Guide" 라는 책 410 페이지를 보면 Safe-Mode 관련 옵션을 아래와 같이 소개하고 있다.
  • dfs.namenode.replication.min(기본값 1)
    hdfs의 복제본 기본값은 3이다. 즉, 특정 블록이 valid한 블록이라고 인정하려면 3개가 잘 있는지 확인해야 할 것이다.
    dfs.namenode.replication.min 옵션은 네임노드가 데이터노드로부터 블록 정보를 받아서 비교하는데, 최소 1개(기본값) 블록 정보만 비교해 보고 valid하다고 판단하게 된다.

  • dfs.namenode.safemode.threshold-pct(기본값 0.999)
    네임노드가 갖고 있는 전체 블록 정보 중 dfs.namenode.replication.min을 만족하는 블록의 비율이 설정된 비율(이상)이 되었을 때, safe mode를 벗어날 수 있는 상태가 된다.

  • dfs.namenode.safemode.extension(기본값 30초)
    dfs.namenode.safemode.threshold-pct에 도달하더라도 바로 safe mode를 벗어나는 건 아니다. 30초(기본값)가 지나야 safe mode를 벗어난다.(이 시간은 왜 있는지는 잘 모르겠다). 책에는 작은 클러스터의 경우 0초로 설정해도 된다라고 언급하고 있다.


참고