DB

[빅데이터] HDFS(Hadoop Distributed File System)

타우루스 2026. 2. 9. 13:11

HDFS는 구글 파일 시스템(GFS) 논문을 기반으로 자바(Java)로 구현된, 대용량 데이터 분산 저장을 위한 파일 시스템입니다.


1. 핵심 아키텍처 (Master/Slave 구조)

HDFS는 명확한 마스터-슬레이브(Master-Slave) 구조를 가집니다.

구성 요소 역할 및 특징 핵심 포인트
NameNode
(Master)
메타데이터 관리: 파일 이름, 권한, 블록 위치 정보 등을 메모리(RAM)에 상주하여 관리

• 클라이언트의 요청(읽기/쓰기) 처리 및 DataNode 제어
SPOF(Single Point of Failure): 네임노드 장애 시 전체 시스템 중단 (HA 구성 필수 점검)
DataNode
(Slave)
실제 데이터 저장: 파일을 블록 단위로 나누어 실제 디스크에 저장

• 클라이언트가 데이터를 읽고 쓸 때 직접 상호작용
Heartbeat: 3초마다 네임노드에 생존 신호 전송 (미전송 시 장애로 간주)
Secondary
NameNode
보조 역할: 네임노드의 FsImage(스냅샷)와 Edits(로그)를 병합(Checkpointing)하여 네임노드의 부하 경감 오해 주의: 네임노드의 '실시간 백업(Hot Standby)'이 아님. 장애 발생 시 즉시 대체 불가.

2. HDFS의 주요 특징 (시험 출제 키워드)

  1. 블록 구조 (Block Storage)
    • 파일을 특정 크기의 블록(Block)으로 나누어 분산 저장합니다.
    • 기본 크기: 128MB (Hadoop 2.0 이상 기준, 과거 64MB).
    • 이점: 파일 크기가 디스크 용량보다 커도 저장 가능, 탐색 시간 최소화.
  2. 데이터 복제 (Replication)
    • 장애 대응(Fault Tolerance)을 위해 각 블록을 복제하여 서로 다른 DataNode에 저장합니다.
    • 기본 복제 수(Replication Factor): 3 (원본 1 + 복제 2).
    • 랙 인지(Rack Awareness): 데이터 유실 방지를 위해 서로 다른 랙(Rack)에 분산 저장.
  3. 데이터 지역성 (Data Locality)
    • "데이터가 있는 곳으로 연산(Code)을 이동시킨다"는 개념입니다.
    • 네트워크 대역폭 절약을 위해, 데이터가 저장된 DataNode에서 MapReduce 작업이 수행되도록 스케줄링합니다.
  4. WORM (Write-Once-Read-Many)
    • 한 번 쓰면 여러 번 읽는 모델에 최적화되어 있습니다.
    • 파일의 수정(Random Write)은 제한적이며, 주로 **Append(추가)**만 지원합니다.

3. 읽기/쓰기 메커니즘 요약

  • 읽기: 클라이언트 → NameNode(블록 위치 확인) → DataNode(데이터 직접 전송)
  • 쓰기: 클라이언트 → NameNode(저장 경로 확인) → DataNode(패킷 단위 전송 및 파이프라인 복제)

핵심 요약

  1. SPOF: NameNode는 단일 실패 지점이 될 수 있으므로 이중화(HA)가 필수적이다.
  2. Secondary NameNode: 이름만 비슷할 뿐, 실시간 장애 복구용 대기 노드가 아니라 '메타데이터 병합(Checkpointing)'을 수행하는 관리 노드이다.
  3. 저사양 하드웨어: 고가의 스토리지 대신 범용 하드웨어(Commodity Hardware)를 사용하여 비용 효율성을 높였다.

Q. 하둡 분산 파일 시스템(HDFS)의 아키텍처 및 동작 원리에 대한 설명으로 가장 적절하지 않은 것은?

 

① HDFS는 고가의 RAID 스토리지 대신 범용 하드웨어(Commodity Hardware)를 사용하도록 설계되었으며, 장애 대응(Fault Tolerance)을 위해 데이터 블록을 기본적으로 3개의 노드에 복제하여 저장한다.

 

② 네임노드(NameNode)는 파일 시스템의 네임스페이스, 파일-블록 매핑 정보, 파일 속성 등 모든 메타데이터를 메모리(RAM)에 상주시켜 관리하므로, 빠른 처리 속도를 보장하지만 메모리 용량에 따른 저장 파일 수의 제한이 있다.

 

③ 세컨더리 네임노드(Secondary NameNode)는 네임노드의 장애 발생 시 즉시 역할을 대체(Failover)하는 대기(Standby) 노드로서, 실시간으로 네임노드의 메타데이터를 동기화하여 고가용성(HA)을 보장하는 핵심 역할을 수행한다.

 

④ 데이터 지역성(Data Locality)을 지원하기 위해 클라이언트가 데이터를 읽거나 쓸 때, 가급적 해당 데이터 블록이 저장된 데이터노드(DataNode) 혹은 가장 가까운 네트워크상의 노드와 통신하도록 스케줄링한다.

 

더보기

정답 ③번

 

③번은 '세컨더리 네임노드(Secondary NameNode)'의 역할을 잘못 설명하고 있습니다. 

  • Secondary NameNode $\neq$ Standby Node:
    • 이름 때문에 네임노드가 죽으면 바로 대체되는 '백업 노드'로 오해하기 쉽습니다.
    • 하지만 세컨더리 네임노드는 실시간 장애 복구(Failover) 기능을 수행할 수 없습니다.
  • 실제 역할 (Checkpointing):
    • 네임노드의 fsimage(스냅샷)와 edits log(변경 로그)를 주기적으로 병합(Merge)하여, 네임노드가 재시작될 때 로딩 시간을 줄여주고 로그 파일이 무한정 커지는 것을 방지하는 '가사 도우미' 역할에 가깝습니다.
  • 고가용성(HA) 구성:
    • 실제 즉시 대체가 가능한 HA 구성을 위해서는 세컨더리 네임노드가 아니라, 'Standby NameNode'와 주키퍼(ZooKeeper) 등을 이용한 별도의 HA 클러스터 구성이 필요합니다.