IT 삽질기

Namenode fsimage, edits log 본문

BigData/Hadoop

Namenode fsimage, edits log

화이팅빌런 2021. 7. 26. 22:59

이번 글에서는 Namenode의 디렉토리 구조와 fsimage, edits log에 대해서 알아보도록 하자.

Namenode 디렉토리 구조

먼저 Namenode의 디렉토리는 아래와 같이 구성되어 있다.

${dfs.namenode.name.dir}/
ㄴ in_use.lock
ㄴ current
    ㄴ VERSION
    ㄴ edits_0000000066074616938-0000000066076353481
    ㄴ edits_inprogress_0000000066083634643
    ㄴ fsimage_0000000066076831695.md
    ㄴ fsimage_0000000066076831695
    ㄴ fsimage_0000000066079768707.md
    ㄴ fsimage_0000000066079768707
    ㄴ fsimage.ckpt_0000000057610652775
    ㄴ seen_txid

파일 하나하나에 대해서 간단히 알아보도록 하자.

  • VERSION : 자바 속성 파일로 사용중인 HDFS 버전이 기록된다.
  • in_use.lock : 네임노드가 저장소 디렉토리를 잠그는데 사용되는 잠금 파일로 다른 네임노드의 인스턴스가 동일한 저장소 디렉토리에서 실행되는 것을 방지하는데, 이는 파일 시스템이 손상되는 것을 막는다.

fsimage와 edits log

다음으로 이번 글에서 주로 다룰 fsimage와 edits log 파일에 대해서 알아보도록 하자.

해당 내용을 알아보기전 먼저 Namenode가 어떻게 동작하는지 알아야할 필요가 있는데, Namenode는 HDFS 파일시스템의 메타데이터를 인메모리로 하며, 이 때 edits log를 먼저 변경한 후 메모리상의 메타데이터를 변경하게 된다.

이는 거대한 fsimage에 매번 변경 기록을 기록하게 되면 걸리는 시간과 성능문제가 발생할 수 있기 때문이다.

쓰기 동작이 발생했다고 생각해보자. Namenode는 변경된 내용을 edit log 파일에 기록하게 되는데 한번에 하나의 파일만 쓰기 위해 edits_inprogress 파일에 수정되게 된다. 쓰기 동작이 끝날 때마다 edits log를 플러시하여 동기화시키고 동기화가 된 이후에야 정상적으로 파일 쓰기가 완료된다.

 

그렇다면 fsimage는 어떤 역할을 할까 fsimage는 파일시스템 이미지의 마지막 트랜잭션을 나타내며 파일, 파일 시스템의 속성, 파일을 구성하는 블록 집합과 같은 정보가 저장되어 있다. namenode는 이를 통해서 HDFS파일을 관리하고, 실제 어떤 블록이 어떤 Datanode에 존재하는지는 fsimage에 기록되지 않으며, Datanode에서 blockreport를 통해 메모리상으로만 관리하게 된다.

 

fsimage와 edits log의 통합

그렇다면 fsimage와 edits log는 언제 통합되게 될까?
namenode에 장애가 발생하거나 재시작되는 경우에 fsimage와 edits log가 통합되어 새로운 fsimage가 만들어지며, 이전에 존재하던 fsimage는 디렉토리 구조에서 보이는 fsimage.ckpt파일로 변경된다.

fsimage.ckpt파일의 크기는 fsimage와 거의 동일하며 이로 인해 용량 문제가 발생하는 경우도 있으니 문제가 발생하는 경우 오래된 ckpt를 삭제하여 용량을 확보할 수 있다.

정리

fsimage와 edits log에 대해서 정리 해보자.

  • fsimage : HDFS상에 존재하는 파일과 디렉토리의 정보를 가지며, 이는 복제 수준, 변경 및 접근 시간, 접근 권한, 파일을 구성하는 블록 집합의 정보를 기록
  • edits log : HDFS에 새로운 파일이 추가되거나, 수정이 일어나는 경우 변경 사항을 edits log에 기록
  • 블록이 어떤 Datanode에 존재하는지는 fsimage에 존재하지 않고, DataNode에서 blockreport를 통해 Namenode에 전달하여 Namenode의 메모리에서 관리
  • fsimage와 edits log는 namenode가 재시작되는 경우에 통합되며, 기존에 fsimage는 fsimage.ckpt 파일로 변경

 

참고자료

https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

'BigData > Hadoop' 카테고리의 다른 글

Hive managed table과 external table  (0) 2021.08.02
Namenode safe mode  (0) 2021.07.28
Hadoop Kerberos 인증과정  (0) 2021.06.27
Yarn NodeManager BindException(Close_wait)  (0) 2021.06.25
Hadoop 데이터 직렬화와 RPC(Remote Procedure Call)  (0) 2021.06.11
Comments