Spark의 핵심 구성요소와 동작 원리를 이해합니다. 이 섹션에서는 Spark가 내부적으로 어떻게 동작하는지, 그리고 효율적인 분산 처리를 위해 알아야 할 개념들을 다룹니다.

전체 비유 테이블#

Spark의 핵심 개념을 일상적인 비유로 이해하세요. 복잡한 분산 시스템도 익숙한 상황에 빗대면 쉽게 파악할 수 있습니다.

개념비유핵심 아이디어
Driver오케스트라 지휘자전체 연주를 조율하지만 직접 악기를 연주하지 않음. 악보(실행 계획)를 보고 단원(Executor)에게 지시
Executor오케스트라 단원각자 맡은 파트를 연주. 지휘자의 지시에 따라 실제 음악(데이터 처리)을 생성
Cluster Manager공연장 매니저연주자에게 의자(리소스)를 배정. 공연장(YARN, K8s) 규칙에 따라 자원 관리
RDD레고 블록 조립 설명서블록을 어떻게 조립하는지 기록. 완성품이 아니라 만드는 방법을 저장. 중간에 무너져도 설명서대로 다시 조립 가능
DataFrame엑셀 스프레드시트행과 열이 있는 표 형태. 컬럼명으로 데이터 접근, SQL처럼 쿼리 가능
Transformation요리 레시피“양파 썰기 → 볶기 → 간 맞추기” 같은 조리법. 레시피만 있으면 아직 요리 안 함
Action“시작!” 신호레시피대로 실제 요리 시작. 완성된 요리(결과)가 나옴
지연 평가대량 주문 묶음 배송주문(Transformation)마다 배송하지 않고, 결제(Action) 시점에 한꺼번에 최적 경로로 배송
파티션피자 조각큰 피자를 여러 조각으로 나눠 여러 사람이 동시에 먹을 수 있음. 조각 수 = 동시 처리 수
셔플카드 섞기52장 카드를 무늬별로 분류하려면 모든 카드를 펼쳐 재배치해야 함. 비용이 큼
Narrow Transformation개인 접시에서 작업내 접시의 음식만 손질. 옆 사람 접시 건드릴 필요 없음
Wide Transformation모든 접시 음식 재분배“고기는 이쪽, 채소는 저쪽"으로 재배치. 모든 테이블 참여 필요
캐싱자주 쓰는 재료 냉장고 보관매번 장보러 가는 대신 냉장고에서 바로 꺼내 사용. 빠르지만 공간 차지
Broadcast회의 자료 복사 배포1부를 돌려보는 대신 참석자 모두에게 복사본 배포. 작은 자료일 때 효율적
DAG조립 순서도A를 만들고 → B와 결합 → C 완성. 순환 없는 단방향 의존 관계
Catalyst Optimizer내비게이션 경로 최적화목적지만 알려주면 가장 빠른 길 자동 계산. 사용자는 “어디로"만 신경
Watermark지각 허용 시간“10분까지 지각 인정”. 그 후 도착자는 출석 불인정(늦은 데이터 처리)

Tip: 각 개념 문서에서 이 비유들이 어떻게 기술적으로 구현되는지 상세히 설명합니다.

Spark의 설계 철학#

왜 Spark는 이런 방식으로 설계되었을까요?

Spark의 설계는 세 가지 핵심 원칙을 따릅니다:

  1. 데이터 이동 최소화: 데이터를 옮기는 것보다 코드를 옮기는 게 빠릅니다. Spark는 가능한 데이터가 있는 곳에서 계산합니다.

  2. 실패는 일상: 수천 대 서버 중 일부는 언제든 고장납니다. RDD의 Lineage(혈통)는 장애 시 손실된 부분만 재계산하는 복구 메커니즘입니다.

  3. 늦출 수 있으면 늦춰라: 지연 평가로 전체 연산을 파악한 후 최적화합니다. 조급하게 중간 결과를 만들면 최적화 기회를 잃습니다.

Java/Spring 개발자가 Spark를 배울 때#

Java/Spring 개발자에게 Spark는 익숙하면서도 새로운 패러다임입니다. Stream API와 유사한 함수형 스타일이지만, 분산 환경의 특성으로 인해 다르게 생각해야 하는 부분이 있습니다.

익숙한 점

  • filter(), map(), groupBy() 같은 함수형 API
  • Java 람다 표현식 활용
  • SQL 쿼리 사용 가능

새롭게 이해해야 할 점

  • 지연 평가(Lazy Evaluation): 메서드 호출이 즉시 실행되지 않음
  • 직렬화 제약: 클로저에서 사용하는 객체가 직렬화 가능해야 함
  • 셔플 비용: 데이터 이동은 네트워크 I/O를 동반하므로 비용이 큼
  • 불변 데이터: RDD/DataFrame은 수정 불가, 항상 새로운 객체 반환

이러한 차이점을 이해하고 나면, Spark는 대용량 데이터 처리를 위한 강력한 도구가 됩니다. 각 개념 문서에서 Java 코드 예제와 함께 상세히 설명합니다.

학습 순서#

아래 순서대로 학습하면 Spark의 기초부터 운영까지 체계적으로 이해할 수 있습니다.

기초 개념

먼저 Spark의 핵심 구조와 API를 이해합니다:

  1. 아키텍처 - Driver, Executor, Cluster Manager의 역할과 상호작용
  2. RDD 기초 - Spark의 기본 추상화, 분산 컬렉션의 개념
  3. DataFrame과 Dataset - 현대적인 고수준 API
  4. Spark SQL - SQL로 분산 데이터 처리
  5. Transformation과 Action - 지연 평가와 실행의 핵심

심화 개념

기초를 이해했다면 성능 최적화와 고급 기능을 학습합니다:

  1. 파티셔닝과 셔플 - 분산 처리의 핵심, 데이터 분배 전략
  2. 캐싱과 영속성 - 인메모리 처리 최적화
  3. Structured Streaming - 실시간 스트림 데이터 처리
  4. MLlib - 분산 머신러닝

운영 개념

프로덕션 환경에서 Spark를 운영하기 위한 지식입니다:

  1. 성능 튜닝 - 메모리, 파티션, 셔플 최적화
  2. 배포와 클러스터 관리 - Standalone, YARN, Kubernetes 환경
  3. Spark Connect - 씬 클라이언트 아키텍처 (Spark 3.4+)

핵심 개념 요약#

Spark를 이해하는 데 필수적인 개념들을 간략히 소개합니다. 각 개념의 상세 내용은 개별 문서에서 다룹니다.

실행 모델

Spark 애플리케이션이 어떻게 실행되는지 이해하기 위한 핵심 구성요소입니다:

개념설명
Driver애플리케이션의 main() 실행, 작업 조율
Executor실제 데이터 처리를 수행하는 워커 프로세스
Cluster Manager리소스 할당 (Standalone, YARN, K8s)
Job하나의 Action에 대응하는 작업 단위
Stage셔플 경계로 나뉜 Task 집합
Task단일 파티션에서 실행되는 최소 작업 단위

Driver는 전체 작업을 조율하고, 실제 데이터 처리는 여러 Executor에서 병렬로 수행됩니다.

데이터 추상화

Spark가 제공하는 세 가지 데이터 API의 특성 비교입니다:

API타입 안전성최적화사용 시점
RDD있음 (제네릭)제한적저수준 제어 필요 시
DataFrame없음 (Row)Catalyst 최적화SQL 스타일 처리
Dataset있음 (case class)Catalyst 최적화타입 안전 + 최적화

대부분의 경우 DataFrame을 사용하고, 컴파일 타임 타입 체크가 필요할 때 Dataset을 선택합니다.

연산 유형

Spark 연산은 크게 Transformation과 Action으로 구분됩니다:

유형특성예시
Transformation지연 평가, 새 RDD/DataFrame 반환map, filter, groupBy
Action즉시 실행, 값 반환collect, count, show

Transformation은 호출 즉시 실행되지 않고, Action이 호출될 때 최적화된 실행 계획으로 처리됩니다.

Narrow vs Wide Transformation

Transformation은 셔플 발생 여부에 따라 두 가지로 구분됩니다:

유형셔플예시
Narrow없음 (1:1 파티션 매핑)map, filter, union
Wide있음 (셔플 발생)groupBy, join, reduceByKey

Wide Transformation은 네트워크 I/O를 발생시키므로 성능에 큰 영향을 미칩니다. 이러한 개념들이 어떻게 연결되는지 각 문서에서 상세히 다룹니다.