핵심 인사이트 (3줄 요약)

  1. 본질: HDFS NameNode는 전체 파일시스템 메타데이터를 RAM에 단독으로 유지하는 구조로 인해 SPOF (Single Point of Failure)와 메모리 확장 한계를 내포하며, MapReduce는 Shuffle 단계의 반복적 디스크 I/O (Input/Output)가 성능 병목이 된다.
  2. 가치: HA (High Availability) NameNode + YARN (Yet Another Resource Negotiator) 전환으로 SPOF를 해소하고, Spark의 인메모리(In-Memory) 처리로 디스크 병목을 근본적으로 극복했다.
  3. 판단 포인트: 기술사 논술에서는 "어떤 문제가 있었고, 어떤 기술적 진화가 이루어졌으며, 남은 트레이드오프는 무엇인가"를 구조적으로 서술하는 것이 고득점의 핵심이다.

Ⅰ. 개요 및 필요성

NameNode의 구조적 취약점

HDFS의 NameNode는 두 가지 근본적 한계를 가진다.

NameNode 구조적 한계
┌─────────────────────────────────────────────────────────┐
│  NameNode (단일 서버)                                    │
│  ┌─────────────────────────────────────────────────┐    │
│  │ FsImage (파일시스템 스냅샷) + EditLog (변경 로그) │    │
│  │ 모두 메모리에 상주 → RAM 한계에 수억 파일 저장 불가│    │
│  └─────────────────────────────────────────────────┘    │
│                                                         │
│  문제 1: SPOF — NameNode 장애 = 전체 HDFS 접근 불가     │
│  문제 2: 메모리 확장 한계 — 파일 수 증가 시 RAM 소진      │
└─────────────────────────────────────────────────────────┘

MapReduce의 디스크 I/O 병목

MapReduce는 각 Job 단계마다 결과를 HDFS(디스크)에 저장하고, 다음 단계에서 다시 읽는 구조다. 반복적 알고리즘(머신러닝)에서 특히 치명적이다.

MapReduce 다단계 처리의 디스크 I/O
┌────────────────────────────────────────────────────────────┐
│ Job 1: Map → [디스크 쓰기] → Reduce → [HDFS 저장]          │
│         ↓                                                  │
│ Job 2: [HDFS 읽기] → Map → [디스크 쓰기] → Reduce → [HDFS] │
│         ↓                                                  │
│ Job N: [HDFS 읽기] → Map → ... (반복할수록 I/O 누적)        │
│                                                            │
│ K-Means 100 이터레이션 = 200회 HDFS 읽기+쓰기 발생!         │
└────────────────────────────────────────────────────────────┘

📢 섹션 요약 비유: MapReduce의 디스크 병목은 "계산할 때마다 종이에 답을 써서 금고에 넣고, 다음 계산 시 금고에서 꺼내 다시 보는 것"이다. 100번 계산하면 200번 금고를 여닫아야 한다. 이걸 머릿속(메모리)에서 전부 처리하면 훨씬 빠르다.


Ⅱ. 아키텍처 및 핵심 원리

NameNode 메타데이터 관리 메커니즘

NameNode 메타데이터 흐름
┌────────────────────────────────────────────────────────────┐
│  NameNode RAM                                              │
│  ┌──────────────────────────────────────────────────────┐ │
│  │ FsImage (최신 스냅샷) + EditLog (최신 변경사항) 병합  │ │
│  │ → 전체 파일시스템 트리 메모리 유지                    │ │
│  └──────────────────────────────────────────────────────┘ │
│               │                    │                       │
│               ▼                    ▼                       │
│  ┌──────────────────┐  ┌──────────────────────────────┐   │
│  │   FsImage (디스크) │  │  EditLog (디스크)              │   │
│  │   (체크포인트)     │  │  (모든 변경사항 순차 기록)      │   │
│  └──────────────────┘  └──────────────────────────────┘   │
│               │                                            │
│               ▼                                            │
│  Secondary NameNode (체크포인팅):                          │
│  FsImage + EditLog 병합 → 새 FsImage 생성 → NameNode 전송 │
└────────────────────────────────────────────────────────────┘
컴포넌트역할중요 주의사항
FsImage파일시스템 전체 메타데이터 스냅샷체크포인트 시점의 최신 상태
EditLog체크포인트 이후 모든 변경사항 기록너무 커지면 재시작 시 재생 시간 증가
Secondary NameNodeFsImage + EditLog 체크포인팅HA 대체가 아님! — 장애 시 수동 복구 필요
Standby NameNode (HA)Active NameNode의 Hot StandbyJournalNode 클러스터로 EditLog 공유

SPOF 해결: HA NameNode 아키텍처

Hadoop 2.x부터 도입된 HA (High Availability) NameNode는 Active/Standby 이중화 구조를 제공한다.

HA NameNode 아키텍처
┌────────────────────────────────────────────────────────────┐
│                                                            │
│  ┌──────────────────┐       ┌──────────────────────────┐  │
│  │  Active NameNode │       │   Standby NameNode       │  │
│  │  (읽기/쓰기)      │       │   (편집로그 동기 추적)    │  │
│  └────────┬─────────┘       └───────────┬──────────────┘  │
│           │  EditLog 쓰기               │ EditLog 읽기     │
│           ▼                            ▼                  │
│  ┌─────────────────────────────────────────────────────┐  │
│  │  JournalNode 클러스터 (3대 이상, Quorum 방식)          │  │
│  └─────────────────────────────────────────────────────┘  │
│                         │                                  │
│                         ▼                                  │
│  ┌─────────────────────────────────────────────────────┐  │
│  │  ZooKeeper 클러스터 (3/5대)                           │  │
│  │  → Active/Standby 역할 선출 (Failover Controller)    │  │
│  └─────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────┘
방식구성장애 복구한계
Secondary NameNodeSingle NameNode + Secondary수동 복구, 데이터 손실 가능SPOF 존재
HA NameNodeActive + Standby + JournalNode + ZooKeeper자동 Failover (30~60초)복잡성 증가
NameNode Federation네임스페이스 분리 다중 NameNode독립적 장애 격리네임스페이스 간 파일 이동 불가

MapReduce vs YARN 아키텍처 발전

Hadoop 1.x (MapReduce v1) vs Hadoop 2.x (YARN)
┌─────────────────────────────────────────────────────────────┐
│  Hadoop 1.x:                                                │
│  JobTracker (단일 마스터) ─── TaskTracker (슬레이브)          │
│  → JobTracker가 클러스터 관리 + 작업 스케줄링 모두 담당       │
│  → SPOF, Map/Reduce 작업만 지원                             │
│                                                             │
│  Hadoop 2.x (YARN):                                         │
│  ResourceManager (클러스터 자원) + ApplicationMaster (앱별)  │
│  → 역할 분리로 SPOF 개선, Spark/Tez/MPI 등 다중 프레임워크   │
└─────────────────────────────────────────────────────────────┘
컴포넌트Hadoop 1.xHadoop 2.x (YARN)
클러스터 관리JobTracker (SPOF)ResourceManager (HA 지원)
작업 실행TaskTrackerNodeManager
애플리케이션 관리JobTracker 내장ApplicationMaster (앱별 독립)
지원 프레임워크MapReduce만Spark, Tez, MPI 등

📢 섹션 요약 비유: YARN으로의 전환은 "소방서장(JobTracker)이 화재 진압도 하고 소방차도 배치하고 인사 관리도 혼자 하던 것을 → 소방청장(ResourceManager)은 소방차만 배치하고, 각 사건 현장 지휘관(ApplicationMaster)이 현장을 직접 지휘하는 구조"로 바꾼 것이다.


Ⅲ. 비교 및 연결

Secondary NameNode vs HA Standby NameNode

항목Secondary NameNodeHA Standby NameNode
주 역할체크포인팅 (FsImage + EditLog 병합)Active의 Hot Standby
SPOF 해결❌ 해결 안 됨✅ 자동 Failover
메타데이터 동기화주기적 체크포인팅JournalNode 통한 실시간 동기화
장애 복구수동 복구, 최신 데이터 손실 가능ZooKeeper 자동 전환 (30~60초)
리소스저사양 서버 가능Active와 동일 사양 필요

MapReduce 디스크 병목의 근본 원인과 Spark 해결

MapReduce vs Spark 처리 방식
┌─────────────────────────────────────────────────────────────┐
│  MapReduce (디스크 중심):                                    │
│  Input → [Map] → 디스크 → [Shuffle] → 디스크 → [Reduce]    │
│                                          → HDFS 저장        │
│                                                             │
│  Spark (메모리 중심):                                        │
│  Input → [RDD Transform1] → RAM → [RDD Transform2] → RAM   │
│        → [Action] → 최종 출력 (중간 결과는 메모리만!)         │
│                                                             │
│  성능 차이: 반복 알고리즘에서 Spark가 10~100배 빠름           │
└─────────────────────────────────────────────────────────────┘
항목MapReduceApache Spark
중간 결과 저장HDFS 디스크RAM (메모리)
반복 처리 성능매 이터레이션마다 디스크 I/ORDD 캐싱으로 재사용
지연 시간분~시간초~분
적합 워크로드단순 배치 ETL반복 알고리즘, 스트리밍, SQL

📢 섹션 요약 비유: MapReduce의 디스크 병목은 "수학 문제 풀 때마다 중간 계산을 지우고 종이에 받아쓰는 것"이고, Spark는 "계산기 메모리에 중간 값을 저장하고 바로 다음 계산에 사용하는 것"이다.


Ⅳ. 실무 적용 및 기술사 판단

NameNode HA 설계 시 고려사항

NameNode HA 설계 체크리스트
┌──────────────────────────────────────────────────────────┐
│  ✓ JournalNode: 3개 이상 (Quorum 방식, 과반수 쓰기 성공)  │
│  ✓ ZooKeeper: 3 또는 5개 (홀수 과반수 보장)               │
│  ✓ Fencing (펜싱): Split-Brain 방지                       │
│    - 네트워크 펜싱: 구 Active의 네트워크 격리              │
│    - STONITH: 구 Active 노드 강제 전원 차단                │
│  ✓ DNS/VIP: 클라이언트는 Active 위치를 투명하게 접근       │
└──────────────────────────────────────────────────────────┘

Split-Brain 문제: 두 NameNode가 모두 Active 상태를 주장하는 상황. 두 NameNode가 서로 다른 메타데이터를 갱신하면 파일시스템 손상이 발생한다. Fencing (울타리치기) 메커니즘으로 반드시 방지해야 한다.

MapReduce 실무 최적화

최적화 방법설명개선 효과
Combiner 사용Map 결과를 로컬에서 사전 집계Shuffle 데이터 양 50~80% 감소
CompressionMap 출력 압축 (Snappy, LZ4)I/O와 네트워크 전송 감소
파티셔너 최적화사용자 정의 파티셔너로 균등 분산리듀서 스큐(Skew) 방지
Speculative Execution느린 태스크 복제 실행스트래글러(Straggler) 문제 완화

기술사 논술 핵심 포인트

  1. SPOF vs 복잡성 트레이드오프: HA 구성은 SPOF를 제거하지만, JournalNode·ZooKeeper·Fencing의 추가 운영 복잡성이 발생한다. 이를 명확히 인정하고 선택 기준을 제시할 것.
  2. Hadoop의 역할 변화: 온프레미스(On-Premise)에서는 여전히 HDFS+YARN이 중심이지만, 클라우드에서는 컴퓨팅-스토리지 분리(S3+Spark)가 주류다. 이 전환의 의미를 설명할 수 있어야 한다.
  3. MapReduce의 현재 위치: MapReduce 자체는 느리지만, Hive on Tez / SparkSQL 등이 내부적으로 최적화된 실행 엔진을 사용하므로 "MapReduce = Hive"라는 오해를 하지 말 것.

📢 섹션 요약 비유: NameNode HA는 "대통령과 부통령 제도"다. 대통령(Active)이 쓰러지면 부통령(Standby)이 즉각 취임하지만, 전 대통령이 혼수상태에서 명령을 계속 내리는 혼란(Split-Brain)을 막으려면 헌법적 절차(Fencing)가 반드시 필요하다.


Ⅴ. 기대효과 및 결론

HDFS HA와 YARN 도입 효과

영역개선 전 (Hadoop 1.x)개선 후 (Hadoop 2.x)
가용성NameNode SPOF (단일 장애점)HA NameNode (99.9% 이상)
확장성4,000 노드 한계NameNode Federation으로 수만 노드
프레임워크MapReduce 전용Spark, Tez, MPI 등 다중 지원
디스크 I/O모든 중간 결과 HDFS 저장YARN + Spark으로 메모리 처리 가능

결론

NameNode SPOF와 MapReduce 디스크 병목은 Hadoop 생태계의 성숙 과정에서 식별되고 해결된 대표적 기술 한계다. HA NameNode는 SPOF를 제거했고, YARN은 단일 프레임워크 의존성을 끊었으며, Spark는 디스크 병목을 메모리로 극복했다. 이 진화 과정은 분산 시스템에서 "가용성"과 "성능"이라는 두 가치를 점진적으로 달성하는 방식의 모범 사례다.

📢 섹션 요약 비유: HDFS의 발전 과정은 "자전거(MapReduce) → 오토바이(YARN + MapReduce) → 자동차(Spark on YARN)"의 진화다. 자전거도 목적지에는 도달하지만, 자동차는 더 빠르고 더 많은 짐을 실을 수 있다. 다만 자동차는 주차 공간(메모리)이 더 필요하다.


📌 관련 개념 맵

관계개념설명
문제 → 해결SPOF → HA NameNodeZooKeeper 기반 자동 Failover
문제 → 해결디스크 병목 → Apache Spark인메모리 RDD 처리
구성 요소JournalNode 클러스터HA NameNode EditLog 공유 저장소
구성 요소ZooKeeperNameNode 리더 선출 조정자
관련 개념Split-Brain두 NameNode가 모두 Active 주장하는 이상 상태
발전 방향YARN (Yet Another Resource Negotiator)MapReduce 한계 극복 범용 자원 관리자
보완 기술Apache TezMapReduce를 DAG 실행으로 최적화

👶 어린이를 위한 3줄 비유 설명

  1. NameNode SPOF는 "마을 지도를 딱 한 명이 갖고 있는 것"이에요. 그 사람이 아프면 아무도 창고 위치를 모르게 돼요.

📈 관련 키워드 및 발전 흐름도

NameNode 단일 장애점 (SPOF)
    │
    ▼
HA NameNode: Active-Standby · JournalNode 동기화
    │
    ▼
MapReduce: Map → Shuffle → Reduce (디스크 기반)
    │ 디스크 I/O 병목
    ▼
Spark: 인메모리 처리 → 10~100배 성능 향상
  1. HA NameNode는 "지도를 두 명이 갖고, 한 명이 아프면 다른 사람이 바로 지도를 꺼내는 것"이에요.
  2. MapReduce 디스크 병목은 "덧셈할 때마다 칠판에 지우고 다시 쓰는 것"인데, Spark는 "머릿속으로 연산해서 최종 답만 칠판에 쓰는 것"처럼 훨씬 빠르답니다!