Phase 7레슨 31

MapReduce

Map, Reduce, Shuffle — 대규모 데이터를 수천 대에서 병렬 처리

💡ELI5·

도서관 목록 작업과 MapReduce

Input: 1000권의 책
  ↓
Map (각 사서가 200권씩 담당):
  사서1: "hello world hello" → (hello,1)(world,1)(hello,1)
  사서2: "hello hadoop"     → (hello,1)(hadoop,1)
  ...
  ↓ Shuffle (단어별로 모음)
  hello: [1,1,1]  world: [1]  hadoop: [1]
  ↓
Reduce (각 단어 담당자가 합산):
  hello: 3  world: 1  hadoop: 1
💡 비유1000권의 책에서 단어 빈도를 세야 한다. 한 사람이 다 세면 너무 오래 걸리니, 5명의 사서(Map)가 200권씩 나눠서 세고, 단어별로 모은 다음(Shuffle), 각 단어 담당자(Reduce)가 합산. MapReduce는 이 '나누고 합치기'를 수천 대 컴퓨터로 자동화.
🔬Deep Dive·

MapReduce 실행 흐름

Input Split → Map (병렬) → Shuffle (네트워크) → Reduce (병렬) → Output

  [Input]     [Map]        [Shuffle]     [Reduce]    [Output]
  file-1 ──→ Mapper-1 ──┐
  file-2 ──→ Mapper-2 ──┼── key별 그룹 ──→ Reducer-1 ──→ out-1
  file-3 ──→ Mapper-3 ──┘                ─→ Reducer-2 ──→ out-2

  Master: 작업 할당, 진행 추적, 장애 시 재실행
단계역할병목
Map입력 데이터를 (key, value) 쌍으로 변환CPU
ShuffleMap 출력을 key별로 Reduce 노드로 전송네트워크 (최대 병목)
Reduce같은 key의 value들을 집계CPU + 디스크
Master전체 조율, 장애 감지, 재실행SPOF
💻Code·

Word Count 예시

# Map: 각 줄에서 단어를 추출하여 (word, 1) 쌍 생성
def map(line):
    for word in line.split():
        yield (word, 1)

# Reduce: 같은 단어의 카운트를 합산
def reduce(word, counts):
    yield (word, sum(counts))

# 실행:
# Input: "hello world hello hadoop"
# Map:   (hello,1) (world,1) (hello,1) (hadoop,1)
# Shuffle: hello→[1,1] world→[1] hadoop→[1]
# Reduce: (hello,2) (world,1) (hadoop,1)
🔬Deep Dive·

MapReduce → Spark → Flink 진화

시스템중간 데이터실행 모델적합
MapReduce디스크 (매 단계)배치대용량 배치 (레거시)
Spark메모리 (RDD)배치 + 마이크로 배치반복 작업, 머신러닝
Flink스트림 (연속)실시간 스트림 + 배치실시간 처리, 이벤트 기반
MapReduce는 분산 데이터 처리의 '원조'지만, 현재는 Spark가 사실상 표준. MapReduce의 핵심 개념(분산, 장애 복구, 데이터 지역성)은 모든 후속 시스템의 기반.
⚖️Trade-off·

MapReduce의 Trade-off

이점한계
수천 대에서 페타바이트 처리매 단계 디스크 I/O (느림)
자동 장애 복구 (태스크 재실행)Shuffle 네트워크 병목
개발자는 Map/Reduce만 작성실시간 처리 불가
데이터 지역성 (계산을 데이터로)반복 작업에 비효율 (Spark가 해결)

❓ 체크포인트 질문

  1. 1.MapReduce가 해결한 핵심 문제는?
  2. 2.Shuffle 단계가 병목인 이유는?
  3. 3.MapReduce Master가 장애 나면 어떻게 되는가?
  4. 4.Spark가 MapReduce보다 빠른 핵심 이유는?
  5. 5.MapReduce가 실시간 처리에 부적합한 이유는?