ABOUT ME

개발지식, 투자, 여행, 책 영화 리뷰

Today
Yesterday
Total
  • [빅데이터 전문가의 하둡관리] 네임노드 오퍼레이션, 고가용성 그리고 페더레이션
    개발지식 아카이브/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



    • 네임노드 시작 과정
      1. fsimage 파일 내용을 메모리로 읽어 들인다
      2. edit log 파일을 로드해 메모리를 업데이트한다
      3. fsimage 파일을 업데이트한다 (메모리와 동기화)
      4. edit log 파일을 삭제한다
      5. 데이터 노드 데몬이 네임노드에 연결되고, 보고 체계가 시작된다

     

    • 네임노드와 데이터 노드 간의 협업
      • 각 데이터노드는 고유한 Storage ID를 부여받고, 이 값은 절대 변경되지 않는다.
      • 데이터노드는 주기적으로 2개 정보를 보낸다
        1. 블록 리포트 (가지고 있는 모든 블록들의 정보)
        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장을 공부한 후 작성하였습니다.

     

     

     

     

    댓글

Copyright in 2020 (And Beyond)