HDFS fsimage와 에디트 로그
HDFS fsimage와 에디트 로그
· Version : HDFS
HDFS 에서 클라이언트가 파일을 생성하거나 이동할때 에디트 로그에 먼저 기록한다. 네임노드는 파일시스템 메타데이터를 메모리로 로드하여 인-메모리 자료구조로 관리하며 에디트 로그가 수정된 후 업데이트를 진행한다. 인-메모리 메타데이터는 읽기 요청을 수행하는데 사용되며 각 디렉터리에 쓰기 동작이 끝나고 나서 성공했다는 결과가 클라이언트로 반환 되기전에 에디트 로그를 플러시하여 동기화한다. 이렇게 함으로서 장애가 발생해도 데이터 유실을 방지할 수 있다.
fsimage는 파일시스템 데이터의 영속적인 체크포인트 파일이다. 하지만 개별 쓰기 동작 때마다 갱신되지는 않는다. fsimage는 파일 시스템에서 존재하는 모든 디렉터리와 파일 아이노드(inode) 정보를 바이트로 직렬화 한다. 각 아이노드는 파일의 복제 단위, 변경 및 접근시간, 접근권한, 블록 크기와 파일을 구성하는 블록 조합들 같은 정보를 가진다. 디렉터리는 변경 시간, 권한 할당, 크기 같은 메타데이터가 저장된다. fsimage 파일은 블록이 저장되는 데이터노드 정보를 기록하지는 않는다. 대신 네임노드는 메모리상에 이 블록과 데이터 노드 매핑정보를 유지한다. 네임노드는 데이터 노드가 클러스터에 참여할 때 블록 리스트를 요청하여 매핑정보를 구성하며 주기적으로 정보를 받아 매핑정보를 최신상태로 유지한다.
에디트 파일은 크기 제한없이 증가할 수 있다. 네임노드가 구동 중일 때에는 에디트 파일이 커지더라도 특별한 영향을 주지는 않지만 네임노드가 재시작될 경우, 많은 에디트 로그의 개별 동작들을 메모리에 반영하기 위해 상당한 시간이 소요된다. 이 시간 동안은 파일 시스템을 사용하지 못하는 상황이 발생한다. 이와 같은 문제를 방지하기 위해 보조 네임노드를 구성한다. 보조 네임노드는 주 네임노드의 인-메모리 메타데이터에 체크포인트를 생성하는 것이다. 체크포인트는 아래와 같은 순서로 진행된다.
1. 보조 네임노드는 주 네임노드에 edits 파일을 순환 사용하도록 요청하고 주 네임 노드에서 새로운 edits 로그는 새로운 파일에 저장된다.
2. 보노 네임노드는 HTTP GET을 이용해서 주 네임노드의 fsimage와 edits를 가져온다.
3. 보조 네임노드는 fsimage를 메모리에 로드하고 edits의 각 동작을 반영한다. 그리고 나서 새롭게 통합된 fsimage 파일을 생성한다.
4. 보조 네임노드는 HTTP POST를 이용하여 새로운 fsimage 파일을 주 네임노드에 전송한다.
5. 주 네임노드는 이전 fsimage를 보조 네임노드로부터 받은 새로운 이미지로 교체하며, 이전 edits 파일을 1단계에서 시작한 새로운 edits로 교체한다. fsimage 파일도 체크포인트가 발생한 시간을 기록하기 위해 변경된다.
아래 그림은 위 체크포인트 과정을 이해하기 쉽도록 그림으로 표현한 것이다.
2020-07-14 / Sungwook Kang / http://sungwookkang.com
Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, HDFS, 하둡 파일 시스템, edit log, fsimage, 체크포인트, checkpoint, namenode, 네임노드