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의 주요 특징 (시험 출제 키워드)
- 블록 구조 (Block Storage)
- 파일을 특정 크기의 블록(Block)으로 나누어 분산 저장합니다.
- 기본 크기: 128MB (Hadoop 2.0 이상 기준, 과거 64MB).
- 이점: 파일 크기가 디스크 용량보다 커도 저장 가능, 탐색 시간 최소화.
- 데이터 복제 (Replication)
- 장애 대응(Fault Tolerance)을 위해 각 블록을 복제하여 서로 다른 DataNode에 저장합니다.
- 기본 복제 수(Replication Factor): 3 (원본 1 + 복제 2).
- 랙 인지(Rack Awareness): 데이터 유실 방지를 위해 서로 다른 랙(Rack)에 분산 저장.
- 데이터 지역성 (Data Locality)
- "데이터가 있는 곳으로 연산(Code)을 이동시킨다"는 개념입니다.
- 네트워크 대역폭 절약을 위해, 데이터가 저장된 DataNode에서 MapReduce 작업이 수행되도록 스케줄링합니다.
- WORM (Write-Once-Read-Many)
- 한 번 쓰면 여러 번 읽는 모델에 최적화되어 있습니다.
- 파일의 수정(Random Write)은 제한적이며, 주로 **Append(추가)**만 지원합니다.
3. 읽기/쓰기 메커니즘 요약
- 읽기: 클라이언트 → NameNode(블록 위치 확인) → DataNode(데이터 직접 전송)
- 쓰기: 클라이언트 → NameNode(저장 경로 확인) → DataNode(패킷 단위 전송 및 파이프라인 복제)
핵심 요약
- SPOF: NameNode는 단일 실패 지점이 될 수 있으므로 이중화(HA)가 필수적이다.
- Secondary NameNode: 이름만 비슷할 뿐, 실시간 장애 복구용 대기 노드가 아니라 '메타데이터 병합(Checkpointing)'을 수행하는 관리 노드이다.
- 저사양 하드웨어: 고가의 스토리지 대신 범용 하드웨어(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 클러스터 구성이 필요합니다.
'DB' 카테고리의 다른 글
| Trigger (0) | 2026.02.11 |
|---|---|
| [정규화] 3정규형 분해 (0) | 2026.02.11 |
| [병행제어] 다중 단위 로킹(Multi-Granularity Locking, MGL) (0) | 2026.02.09 |
| [함수종속] 최소 집합(Minimal Cover) (0) | 2026.02.08 |
| [함수종속] 암스트롱 추론 규칙(Armstrong's Axioms) (0) | 2026.02.08 |