-
[빅데이터 전문가의 하둡관리] 네임노드 오퍼레이션, 고가용성 그리고 페더레이션개발지식 아카이브/Data - Hadoop 2025. 2. 10. 07:00
네임노드 오퍼레이션, 고가용성 그리고 페더레이션
1. 네임노드 오퍼레이션 이해
- HDFS 메타데이터는 2개의 파일에 저장된다 => fsimage, edit log
- fsimage = 특정 시점에 HDFS 메타데이터에 대한 스냅샷
- editlog = 스냅샷 생성 이후 (체크포인트) 생긴 변화 정보 파일들
- HDFS 메타데이터
- 파일 위치
- 데이터 블록 이름
- 데이터 블록 위치
- 파일 소유권
- 네임노드는 active 상태일 때는 절대 checkpoint를 변경하지 않는다
- Edit Log + 기존 FsImage → 새로운 FsImage로 통합하는 것이 checkpoint인데 이것을 하지 않는다
- 새로운 체크포인트는 네임노드가 시작할 때 시작된다!
- 모든 쓰기 오퍼레이션은 HDFS 메타데이터 변경 -> 네임노드 메모리 업데이트 및 Edit log 기록 -> 클라이언트 트랜잭션 순으로 진행된다.
- fsimage 파일 다운로드할 수 있는 명령어
hdfs dfsadmin -fetchImage $LOCAL_PATH
- 네임노드 시작 과정
- fsimage 파일 내용을 메모리로 읽어 들인다
- edit log 파일을 로드해 메모리를 업데이트한다
- fsimage 파일을 업데이트한다 (메모리와 동기화)
- edit log 파일을 삭제한다
- 데이터 노드 데몬이 네임노드에 연결되고, 보고 체계가 시작된다
- 네임노드와 데이터 노드 간의 협업
- 각 데이터노드는 고유한 Storage ID를 부여받고, 이 값은 절대 변경되지 않는다.
- 데이터노드는 주기적으로 2개 정보를 보낸다
- 블록 리포트 (가지고 있는 모든 블록들의 정보)
- 하트비트
- 10분 동안 하트비트가 안 오면 죽은 것으로 간주하고 데이터 블록 복제 절차에 들어간다
- 만약 10분 후에 다시 하트비트가 오면? (이미 복제된 상태인데?) 그럼 불필요한 블록을 삭제하게 시킨다
2. 체크포인팅- 체크포인트
- 현재의 fsimage와 edit log를 합쳐 새로운 fsimage를 생성하는 과정
- edit log 세그먼트들은 수십~수백 바이트의 작은 파일들
- 체크포인트는 리소스가 많이 들어가는 오퍼레이션으로, 체크포인트 과정에서는 client operation (읽기 쓰기)을 수행할 수 없다
- 그럼 어떻게? 우리는 다운타임이 발생하는 걸 원치 않는데?
- 그래서 세컨더리 네임노드나 스탠바이 네임노드가 체크포인팅을 대신하는 것이다
- 그럼 어떻게? 우리는 다운타임이 발생하는 걸 원치 않는데?
- 세컨더리 네임노드, 체크포인트, 그리고 스탠바이 노드들
- 세컨더리 네임노드
- 네임노드와 동일한 디렉토리를 유지하는 역할
- 체크포인트 노드
- 정기적으로 체크포인팅을 수행하는 역할
- edit log들을 다운로드해서 fsimage에 합치고 새로 만들어진 이미지를 다시 네임노드에 보낸다
- 스탠바이 네임노드
- 네임노드 서비스를 위한 대기 시스템 (Hot standby)
- 세컨더리 네임노드
- 체크포인팅 주기 설정
- 체크포인트 소요 시간은 이전 체크포인트 이후로 얼마나 많은 변경이 있었는지에 따라 다르다
- 몇 달 동안 체크포인트를 하지 못한 경우 n일 이상 걸리는 경우도 있다 ㄷㄷ
- 기본적으로 100만 트랜잭션마다 체크포인팅 혹은 경과 시간 이후 체크포인팅
- 체크포인트 소요 시간은 이전 체크포인트 이후로 얼마나 많은 변경이 있었는지에 따라 다르다
dfs.namenode.checkpoint.txns // 트랜잭션 설정 dfs.namenode.checkpoint.period // 경과시간 설정
- 체크포인트 성능 관리하기 (실무)
- 최대 대역폭 지정
- fsimage와 edit 파일을 전송할 때 사용할 수 있는 최대 대역폭을 지정
- 이 설정은, 네임노드가 체크포인팅 중이라도 응답이 가능하도록 도움을 준다 (체크포인팅이 대역폭을 독점하면 클라이언트 요청이 지연될 수 있기 때문)
- 소켓 타임아웃 설정
- 이미지 파일을 전송할 때 사용하는 소켓의 타임아웃을 설정하여, 보내는 쪽에서 실패할 때 클라이언트가 멈추는 문제를 방지
- 최대 대역폭 지정
dfs.image.transfer.bandwidthPerSec // 최대 대역폭 지정 dfs.image.transfer.timeout
3. 네임노드 안전 모드
-
- 안전 모드: 네임노드가 읽기 전용 상태가 되는 것을 의미
- (자동전환) 네임노드는 부팅 시 자동으로 안전 모드로 전환한다
- 네임노드는 데이터노드들의 블록리포트를 기다린다
- 블록들의 replica 복제 비율이 만족될 때 (예를 들어 최소 3개 이상의 데이터 노드에 복제된 것을 확인했을 때) 안전 모드에서 빠져나온다
- (수동전환) 명령어로 수동으로 안전 모드로 만들 수도 있다
- 네임노드 메타데이터 백업 시 사용할 수 있다
- 혹은 다수의 데이터노드들에 장애가 발생했을 때 대규모 데이터 복제를 피하고 싶을 때 사용할 수도 있다.
- 예) 안전 모드로 만든 후 데이터노드들을 복구하고 안전 모드를 해제한다
- (자동전환) 네임노드는 부팅 시 자동으로 안전 모드로 전환한다
dfsadmin -safemode enter // 안전 모드 만들기 dfsadmin -safemode get // 현재 안전 모드 상태 확인하기 dfsadmin -safemode leave // 안전 모드에서 나가기
4. HDFS 고가용성 설정
하둡 2부터는 네임노드를 2개 동시에 실행하여 높은 가용성을 제공할 수 있도록 한다.
- 액티브 네임노드 + 스탠바이 네임노드
- 저널노드가 두 네임노드간 메타데이터를 동기화하는 역할을 함
이 포스팅은 2024년 10월 ~ 12월에 공부한 도서인 빅데이터 전문가의 하둡관리 11장을 공부한 후 작성하였습니다.
'개발지식 아카이브 > Data - Hadoop' 카테고리의 다른 글
[빅데이터 전문가의 하둡관리] 하둡 로깅 이해하기 (0) 2025.02.24 [빅데이터 전문가의 하둡관리] 하둡 클러스터의 리소스 할당 (0) 2025.02.19 [빅데이터 전문가의 하둡관리] HDFS 명령, 퍼미션, 스토리지 (0) 2025.02.04 [빅데이터 전문가의 하둡관리] HDFS의 동작 알고리즘 (1) 2024.12.18 [빅데이터 전문가의 하둡관리] Hadoop 아키텍처 (1) 2024.12.16 - HDFS 메타데이터는 2개의 파일에 저장된다 => fsimage, edit log