분산처리/빅데이터-하둡, 하이브로 시작하기

2-2) HDFS

busy맨 2023. 7. 16. 23:35

1. HDFS

  • Hadoop Distributed File System
  • 범용 하드웨어에서 동작하고, 장애 복구성을 가지는 분산 파일 시스템
  • 배치러리를 위해 설계됨
    • 빠른 데이터 응답시간이 필요한 작업에 부적합
  • 네임노드가 단일 실패 지점(SPOF)이 되기 때문에 네임노드 관리가 중요

 

  • 특징
    1.  블록 복제를 이용한 장애 복구
      • 장애 복구를 위해 각 블록을 복제하여 저장
      • 기본 복제 단위는 3개로, 하나의 블록이 3개의 블록으로 복제
      • 문제가 생기면 다른 블록을 이용해 데이터 복구
    2. 읽기 중심
      • 데이터를 한 번 쓰면 여러 번 읽는 것이 목적
      • 파일의 수정 지원 X
    3. 데이터 지역성
      • 데이터가 있는 곳에서 알고리즘을 처리하여 네트워크를 통해 대용량 데이터를 이동시키는 비용을 줄임

2. 구조

  • 마스터 - 슬레이브 구조
  • 하나의 네임노드와 여러 개의 데이터노드로 구성
    • 네임노드: 메타데이터 저장
    • 데이터노드: 블록 단위의 데이터 저장

HDFS의 구조

3. 네임노드

  • 메타데이터 관리
    • 각 데이터노드에서 전달하는 메타데이터를 받아서 전체 노드의 메타데이터 정보와 파일 정보를 묶어서 관리
      • 메타데이터: 파일이름, 파일 크기, 파일 생성 시간, 파일 접근 권한, 파일이 위치한 블록의 정보 등으로 구성
  • 데이터노드 관리
    • 데이터노드가 주기적으로 전달하는 하트비트(3초)와 블록리포트(6초)를 이용하여 데이터 노드의 동작상태, 블록상태 관리
    • 하트비트를 이용하여 데이터노드의 동작을 확인
    • 블록리포트를 이용하여 HDFS에 저장된 파일에 대한 최신 정보를 유지

 

  • 구동 과정
    1. Fsimage를 읽어 메모리에 적재합니다.
    2. Edits 파일을 읽어와서 변경내역을 반영
    3. 현재의 메모리 상태를 스냅샷으로 생성하여 Fsimage 파일 생성
    4. 데이터 노드로부터 블록리포트를 수신하여 매핑정보 생성
    5. 서비스 시작

4. 데이터노드

  • 파일을 저장하는 역할
    • 파일은 블록 단위로 저장
  • 네임노드에 주기적으로 하트비트와 블록리포트를 전달

 

  •  상태
    1. 활성 상태
      • 데이터노드가 Live 상태인지 Dead 상태인지를 나타냄
    2. 운영 상태
      • 데이터노드의 업그레이드, 패치 같은 작업을 하기 위해 서비스를 멈춰야 할 경우 블록을 안전하게 보관
        • NORMAL: 서비스 상태
        • DECOMMISSIONED: 서비스 중단 상태
        • DECOMMISSION_INPROGRESS: 서비스 중단 상태로 진행 중
        • IN_MAINTENANCE: 정비 상태
        • ENTERING_MAINTENANCE: 정비 상태로 진행 중

 

5. 파일 읽기 / 쓰기

  • HDFS 파일에 접근하는 방법
    1. HDFS 명령형 인터페이스를 이용하기
    2. Java, C API를 구현하여 접근

 

  • 파일 읽기
    1. 네임노드에 파일이 보관된 블록 위치 요청
    2. 네임노드가 블록 위치 반환
    3. 각 데이터 노드에 파일 블록을 요청
    4. 노드의 블록이 깨져 있으면 네임노드에 이를 통지하고 다른 블록 확인

파일 읽기

  • 파일 쓰기
    1. 네임노드에 파일 정보를 전송하고, 파일의 블록을 써야할 노드 목록 요청
    2. 네임노드가 파일을 저장할 목록 반환
    3. 데이터 노드에 파일 쓰기 요청
      • 데이터 노드간 복제가 진행

파일 쓰