CLAUD COMPUTERING

[클라우드 컴퓨터링] 하둡 분산 파일 시스템이란?(Hadoop Distributed File System, HDFS)

ch010104 2025. 9. 25. 22:46
  • 빅데이터 시대, 수십, 수백 페타바이트에 달하는 데이터를 어떻게 저장하고 관리할 수 있을까?
  • 이때 등장하는 기술이 하둡 분산 파일 시스템(Hadoop Distributed File System, HDFS)
  • HDFS는 대용량 데이터를 안정적으로 저장하고, 빠른 속도로 처리할 수 있도록 설계된 분산 파일 시스템의 표준

HDFS의 핵심 설계 철학: 대용량, 스트리밍, 그리고 안정성

- HDFS는 처음부터 일반적인 파일 시스템과는 다른 목적을 가지고 설계되

- 세 가지 핵심 키워드를 통해 그 특징을 이해할 수 있음

  1. 초대용량 파일 (Very Large Files):
    - HDFS는 수백 테라바이트에서 페타바이트 규모의 데이터를 저장하는 것을 목표
  2. 스트리밍 데이터 접근 (Streaming Data Access):
    - 데이터는 한 번 쓰고, 여러 번 읽는(write-once, read-many-times) 패턴에 최적화
    - 데이터가 생성되면 수정보다는 전체 데이터를 읽어 분석하는 작업이 주를 이루기 때문
    - 따라서 전체 데이터를 읽는 처리량(throughput)이 개별 파일 접근 속도(latency)보다 중요하게 여겨짐
  3. 범용 하드웨어 (Commodity Hardware):
    - HDFS는 고가의 고성능 장비가 아닌, 여러 공급업체로부터 쉽게 구할 수 있는 일반적인 서버 컴퓨터들로 클러스터를 구성하는 것을 전제로 함

이러한 설계 때문에 대규모 클러스터에서는 노드(개별 컴퓨터) 장애가 드문 일이 아니라 빈번하게 발생

HDFS는 이러 장애 상황에서도 눈에 띄는 중단 없이 안정적으로 계속 작동하도록 설계

 

반면, HDFS가 적합하지 않은 경우도 있음

  • 낮은 지연 시간(Low-latency) 데이터 접근:
    - 빠른 응답 속도를 요구하는 작업에는 적합하지 않음
  • 수많은 작은 파일:
    - 파일 메타데이터를 관리하는 네임노드(NameNode)의 메모리가 한계에 부딪힐 수 있음
  • 잦은 파일 수정:
    - HDFS는 파일의 끝에 데이터를 추가하는(append-only) 방식에 최적화되어 있어, 여러 사용자가 동시에 파일을 수정하는 작업에는 부적합

HDFS 아키텍처: NameNode와 DataNode의 협력

파일 시스템의 메타데이터와 실제 데이터를 분리하여 관리하는 독특한 구조를 가짐

이 구조의 핵심에는 네임노드(NameNode)데이터노드(DataNode)가 있음

  • HDFS는 메타데이터를 관리하는 NameNode실제 데이터를 저장하는 DataNode로 구성

1. 네임노드 (NameNode): 파일 시스템의 지휘자

- HDFS의 마스터 서버 역할을 하며, 파일 시스템의 모든 메타데이터를 관리

- 구체적으로는 다음과 같은 정보를 유지

  • 파일 시스템 네임스페이스(Namespace) 트리: 파일과 디렉터리의 계층 구조
  • 파일 블록 매핑 정보: 각 파일이 어떤 데이터 블록으로 나뉘어 있고, 그 블록들이 어느 데이터노드에 저장되어 있는지에 대한 정보

- 이 모든 정보는 신속한 접근을 위해 RAM에 유지

- 네임노드는 시스템 시작 시 각 데이터노드로부터 블록 정보를 받아 메타데이터를 재구성

 

2. 데이터노드 (DataNode): 데이터의 실제 저장소

- 데이터노드는 실제 데이터를 저장하는 역할을 담당

- 클라이언트의 요청에 따라 데이터를 저장하거나 조회하여 전달

- 데이터노드는 주기적으로 네임노드에게 자신이 살아있다는 신호인 하트비트(Heartbeat)와 자신이 보관 중인 블록 목록을 담은 블록 리포트(Block Report)를 보냄

  • 하트비트:
    - 기본적으로 3초마다 네임노드에 전송
    - 만약 네임노드가 일정 시간(기본 10분) 동안 하트비트를 받지 못하면 해당 데이터노드를 장애가 발생한 것으로 간주
    - 네임노드는 이 하트비트에 대한 응답을 보낼 때 블록 복제, 삭제, 재등록 등의 명령을 함께 실어 보낼 수 있음
  • 블록 리포트:
    - 데이터노드 등록 직후 처음 전송되고, 이후에는 1시간마다 전송
    - 이 보고서에는 블록 ID, 생성 스탬프, 길이 등의 정보가 포함

3. 블록 (Blocks): 데이터를 나누는 단위

- HDFS는 파일을 일정한 크기의 블록(Block)으로 나누어 저장

- 일반적인 파일 시스템의 블록 크기보다 훨씬 큰 64MB(기본값) 또는 128MB를 사용하는데, 이는 디스크 탐색(seek) 비용을 최소화하고 데이터 전송 시간을 최적화하기 위함

  • 장애 복구와 성능 향상을 위해 각 블록은 여러 데이터노드에 복제되어 저장기
  • 본 복제본 수는 3개이며, 이는 파일별로 설정 가능
  • 612MB 크기의 파일이 128MB 블록 4개와 100MB 블록 1개로 나뉘어 저장되는 예시.

데이터 무결성과 읽기/쓰기 과정

- HDFS는 데이터의 무결성을 보장하고 효율적인 데이터 처리를 위해 다음과 같은 메커니즘을 사용

  • 체크섬 (Checksum):
    - 데이터 손상을 감지하기 위해 모든 데이터 블록에 대한 체크섬을 생성하고 저장
    - 클라이언트가 데이터를 읽을 때 이 체크섬을 검증하며, 만약 데이터 손상이 발견되면 네임노드에 알리고 다른 데이터노드에 있는 정상 복제본에서 데이터를 다시 읽어옴
  • 파일 읽기 (Reading a file):
    1. 클라이언트는 네임노드에 파일 읽기를 요청
    2. 네임노드는 해당 파일의 블록 목록과 각 블록이 저장된 데이터노드의 위치 정보를 반환(이때 위치 정보는 클라이언트와의 거리가 가까운 순으로 정렬)
    3. 클라이언트는 가장 가까운 데이터노드에 직접 접속하여 데이터를 읽어옴
  • 파일 쓰기 (Writing a file):
    1. 클라이언트는 네임노드에 파일 쓰기를 요청
    2. 네임노드는 해당 블록을 저장할 데이터노드 목록을 클라이언트에게 전달
    3. 클라이언트는 이 데이터노드 목록으로 데이터 파이프라인을 구성하고 첫 번째 데이터노드에 데이터를 전송
    4. 데이터를 받은 데이터노드는 다음 데이터노드로 데이터를 전달하는 과정을 거쳐 최종적으로 모든 복제본이 저장

- 클라이언트는 NameNode로부터 블록 위치 정보를 받아 DataNode에 직접 접속해 데이터를 읽음