Spark RDD & BlockManager 내부 구조

김도비·2025년 11월 6일

Spark

목록 보기
5/7

Spark 파일 읽기 → RDD 생성 → BlockManager 저장 전체 구조


전체 흐름 다이어그램

HDFS / S3 / Local FS
────────────────────────────────────────────────────────────────
  • 파일을 블록 단위로 분할 (HDFS block, 기본 128 MB)
  • Hadoop InputFormat을 통해 InputSplit 생성
────────────────────────────────────────────────────────────────
                          │
                          ▼
Driver JVM
────────────────────────────────────────────────────────────────
  • SparkContext.textFile() → HadoopRDD 생성
  • InputSplit → Partition 매핑
  • DAGScheduler → TaskScheduler 통해 Task 생성 및 분배
  │
  ├── BlockManagerMaster
  │     • 모든 Executor BlockManager 등록·관리
  │     • 블록 메타데이터(위치·크기·StorageLevel) 기록
  │     • 실제 데이터 저장 ✗  →  "주소록"만 유지
  │     • 일부 Broadcast 데이터만 예외적으로 보관
  │
  └── ApplicationMaster (YARN)
        • Executor 컨테이너 생성 및 리소스 관리
        • 데이터 처리·저장 관여 ✗
────────────────────────────────────────────────────────────────
                          │
                          ▼
Executors (N개)
────────────────────────────────────────────────────────────────
각 Executor JVM은 다음 구성요소를 가짐:

  ├── BlockManager  (실제 데이터 저장소)
  │     ├─ MemoryStore       → JVM Heap / Off-Heap 메모리
  │     ├─ DiskStore         → 로컬 디스크
  │     ├─ BlockInfoMap      → 블록 메타데이터
  │     └─ BlockTransferService → Executor 간 블록 네트워크 전송
  │
  ├── Task 실행 흐름
  │     ① InputSplit 범위의 파일 블록 읽기
  │     ② Iterator 기반으로 map / filter 연산 수행
  │     ③ cache() / persist() 지정 시 BlockManager에 저장
  │     ④ Driver의 BlockManagerMaster에 블록 정보 보고
  │
  └── ExecutorMemory (Heap + Off-Heap)
        BlockManager가 사용하는 실제 메모리 공간
────────────────────────────────────────────────────────────────
                          │
                          ▼
BlockManager 간 통신 흐름
────────────────────────────────────────────────────────────────
  ① Executor에서 블록 생성 후 Driver에 등록 보고
      → updateBlockInfo() RPC 호출
  ② Driver의 BlockManagerMaster가 "rdd_x_y → Executor N" 기록
  ③ 다른 Executor가 필요 시 Driver에서 블록 위치 조회
  ④ BlockTransferService가 Executor 간 네트워크로 블록 전송
────────────────────────────────────────────────────────────────

컴포넌트별 역할 요약

컴포넌트역할데이터 보관
BlockManagerMaster (Driver)블록 위치·메타데이터 "주소록" 관리✗ (Broadcast 예외)
ApplicationMaster (YARN)Executor 컨테이너·리소스 관리
BlockManager (Executor)실제 데이터 저장 (Memory / Disk)
BlockTransferServiceExecutor 간 블록 네트워크 전송

핵심 정리

  • Executor가 파일 블록을 읽어 자신의 BlockManager 메모리(또는 디스크)에 저장한다.
  • Driver의 BlockManagerMaster는 그 위치와 상태를 논리적으로 기록할 뿐, 데이터를 직접 보유하지 않는다.
  • ApplicationMaster는 오로지 리소스 및 컨테이너 관리만 담당하며, 데이터 처리·보관에는 관여하지 않는다.
  • Executor 간 데이터 이동이 필요한 경우, Driver에서 위치를 조회한 후 BlockTransferService를 통해 직접 전송한다.
profile
모든 걸 기록하자

0개의 댓글