Spark에서 사용되는 주요 용어와 개념을 정리합니다. 각 용어에서 관련 문서로 이동할 수 있습니다.
TL;DR
- 핵심 추상화: SparkSession(진입점) → Application → Job → Stage → Task
- 데이터 구조: RDD(저수준) < DataFrame(스키마, Row) < Dataset(타입 안전)
- 실행 모델: Transformation(지연 평가) + Action(실제 실행) = DAG 기반 실행
- 성능 핵심: Partition(분할 단위), Shuffle(데이터 재분배), Cache/Persist(재사용)
- 최적화 도구: Catalyst Optimizer(쿼리 최적화), Tungsten(실행 엔진), AQE(런타임 최적화)
핵심 개념#
Action
RDD/DataFrame의 실제 계산을 트리거하고 결과를 반환하는 연산. count(), collect(), show(), write() 등이 있다.
→ Transformation과 Action
Application
사용자가 제출한 Spark 프로그램. Driver와 Executor로 구성된다. → 아키텍처
Block Manager
Executor 내에서 캐시된 데이터와 셔플 데이터를 관리하는 컴포넌트. 메모리와 디스크 저장을 담당한다. → 아키텍처, 캐싱과 영속성
Broadcast Variable
모든 노드에 읽기 전용으로 배포되는 공유 변수. 작은 데이터셋을 효율적으로 공유할 때 사용한다. → 성능 튜닝
Bucketing
조인 최적화를 위해 동일한 키의 데이터를 같은 버킷에 저장하는 기법. 조인 시 Shuffle 회피 가능. → 파티셔닝과 셔플
Catalyst Optimizer
Spark SQL의 쿼리 최적화 엔진. 논리 계획을 최적화된 물리 계획으로 변환한다. → Spark SQL
Checkpoint
RDD/DataFrame을 안정적인 저장소에 저장하여 Lineage를 끊고 장애 복구를 빠르게 하는 메커니즘. → 캐싱과 영속성
Client Mode
Driver가 클라이언트(spark-submit 실행 위치)에서 실행되는 배포 모드. 개발/디버깅에 적합. → 아키텍처, 배포와 클러스터 관리
Cluster Manager
클러스터의 리소스를 관리하는 외부 서비스. Standalone, YARN, Kubernetes, Mesos 등이 있다. → 아키텍처, 배포와 클러스터 관리
Cluster Mode
Driver가 클러스터 내부에서 실행되는 배포 모드. 프로덕션에 적합. → 아키텍처, 배포와 클러스터 관리
Coalesce
파티션 수를 줄이는 연산. Shuffle 없이 파티션을 병합한다. → 파티셔닝과 셔플
Column Pruning
쿼리에 필요한 컬럼만 읽는 최적화 기법. Catalyst Optimizer가 자동 적용. → Spark SQL
DAG (Directed Acyclic Graph)
Transformation의 의존 관계를 나타내는 방향성 비순환 그래프. Spark가 실행 계획을 최적화하는 데 사용한다. → 아키텍처
DataFrame
이름 있는 컬럼으로 구성된 분산 데이터 컬렉션. Java에서는 Dataset<Row>로 표현된다.
→ DataFrame과 Dataset
Data Skew
특정 파티션에 데이터가 집중되는 현상. 일부 Task만 오래 걸리는 원인이 된다. Salting으로 해결. → 파티셔닝과 셔플
Dataset
특정 타입을 가진 분산 데이터 컬렉션. 컴파일 타임 타입 안전성을 제공한다. → DataFrame과 Dataset
Driver
Spark 애플리케이션의 main() 함수를 실행하고 SparkSession을 생성하는 프로세스. → 아키텍처
Encoder
Dataset에서 객체와 Spark 내부 바이너리 형식 간 변환을 담당하는 컴포넌트. Encoders.bean(), Encoders.STRING() 등.
→ DataFrame과 Dataset
Executor
Worker 노드에서 실행되는 JVM 프로세스. Task를 실행하고 데이터를 저장한다. → 아키텍처
Hash Partitioning
키의 해시값을 기준으로 데이터를 파티션에 분배하는 방식. 기본 파티셔닝 전략. → 파티셔닝과 셔플
Job
하나의 Action에 대응하는 병렬 계산 단위. 여러 Stage로 구성된다. → 아키텍처
Kryo Serialization
Java 기본 직렬화보다 빠르고 컴팩트한 직렬화 라이브러리. 성능 최적화에 권장. → 성능 튜닝
Kubernetes
컨테이너 기반 Cluster Manager. 클라우드 네이티브 환경에서 Spark 실행에 사용. → 배포와 클러스터 관리
Lazy Evaluation (지연 평가)
Transformation 호출 시 즉시 실행하지 않고, Action이 호출될 때까지 실행을 지연하는 방식. → Transformation과 Action
Lineage
RDD가 어떤 Transformation을 통해 생성되었는지에 대한 정보. 장애 복구에 사용된다. → RDD 기초
Narrow Transformation
각 입력 파티션이 최대 하나의 출력 파티션에만 기여하는 Transformation. Shuffle이 발생하지 않는다. → Transformation과 Action
Off-Heap Memory
JVM 힙 외부의 메모리 영역. GC 영향을 받지 않아 대용량 캐싱에 효과적. → 아키텍처, 성능 튜닝
Parquet
컬럼 기반 저장 포맷. 압축 효율이 높고 Column Pruning을 지원하여 Spark에서 권장. → DataFrame과 Dataset, 성능 튜닝
Partition
RDD/DataFrame 데이터의 논리적 분할 단위. 각 파티션은 클러스터의 한 노드에서 처리된다. → 파티셔닝과 셔플
Partition Pruning
쿼리 조건에 해당하는 파티션만 읽는 최적화 기법. 파티셔닝된 테이블에서 I/O 감소. → 파티셔닝과 셔플
Persist
RDD/DataFrame을 지정된 Storage Level로 메모리나 디스크에 저장하는 것. → 캐싱과 영속성
Physical Plan
Catalyst Optimizer가 생성한 최종 실행 계획. 실제 RDD 연산으로 변환된다. → Spark SQL
Predicate Pushdown
필터 조건을 데이터 소스 레벨로 내려보내는 최적화. 불필요한 데이터 읽기 감소. → Spark SQL
Range Partitioning
키 값의 범위를 기준으로 데이터를 파티션에 분배하는 방식. 정렬된 데이터에 적합. → 파티셔닝과 셔플
RDD (Resilient Distributed Dataset)
Spark의 기본 데이터 추상화. 불변, 분산, 장애 복구 가능한 데이터 컬렉션. → RDD 기초
Repartition
파티션 수를 변경하는 연산. Shuffle이 발생한다. → 파티셔닝과 셔플
Serialization (직렬화)
객체를 바이트 스트림으로 변환하는 과정. 네트워크 전송이나 디스크 저장에 필요하다. → 성능 튜닝
Salting
Data Skew 해결 기법. 핫 키에 랜덤 접두사를 추가하여 데이터를 분산시킨다. → 파티셔닝과 셔플
Shuffle
파티션 간 데이터 재분배. Wide Transformation에서 발생하며 성능에 큰 영향을 미친다. → 파티셔닝과 셔플
Shuffle Spill
Shuffle 중 메모리가 부족할 때 데이터를 디스크에 저장하는 현상. 성능 저하의 신호. → 파티셔닝과 셔플
SparkContext
Spark 클러스터에 대한 연결을 나타내는 객체. Spark 2.0 이후 SparkSession으로 통합되었다. → 아키텍처
SparkSession
Spark 애플리케이션의 통합 진입점. SparkContext, SQLContext, HiveContext를 포함한다. → Quick Start, 아키텍처
Stage
Shuffle 경계로 나뉜 Task의 집합. 하나의 Job은 여러 Stage로 구성된다. → 아키텍처
Standalone
Spark에 내장된 Cluster Manager. 설정이 간단하여 소규모 클러스터나 학습용에 적합. → 배포와 클러스터 관리
Storage Level
데이터 캐싱 시 저장 방식을 지정. MEMORY_ONLY, MEMORY_AND_DISK, DISK_ONLY 등이 있다. → 캐싱과 영속성
Task
단일 Partition에서 실행되는 최소 작업 단위. Executor에서 실행된다. → 아키텍처
Transformation
기존 RDD/DataFrame에서 새로운 RDD/DataFrame을 생성하는 연산. 지연 평가된다. → Transformation과 Action
Tungsten
Spark의 실행 엔진 최적화 프로젝트. 메모리 관리, 코드 생성 등을 개선한다. → 성능 튜닝
Unified Memory Management
Spark 1.6+에서 도입된 메모리 모델. Execution(연산)과 Storage(캐시) 메모리가 동적으로 공유된다. → 아키텍처
Whole-Stage Code Generation
여러 연산자를 하나의 함수로 융합하여 가상 함수 호출 오버헤드를 제거하는 Tungsten 기법. → Spark SQL
Wide Transformation
여러 입력 파티션이 하나의 출력 파티션에 기여하는 Transformation. Shuffle이 발생한다. → Transformation과 Action
Worker Node
Executor를 실행하는 클러스터의 노드. → 아키텍처, 배포와 클러스터 관리
YARN
Hadoop 생태계의 Cluster Manager. 기존 Hadoop 클러스터가 있는 환경에서 사용. → 배포와 클러스터 관리
핵심 개념 요약
계층 용어 설명 진입점 SparkSession 모든 Spark 작업의 시작점 실행 단위 Application → Job → Stage → Task 큰 단위에서 작은 단위로 분해 데이터 추상화 RDD → DataFrame → Dataset 저수준에서 고수준으로, 타입 안전성 증가 실행 방식 Transformation (지연) + Action (실행) DAG로 최적화 후 실행 성능 핵심 Narrow(셔플X) vs Wide(셔플O) Transformation Wide일수록 비용 증가
스트리밍 용어#
Incremental Processing
전체 데이터를 재처리하지 않고 새로운 데이터만 처리하는 방식. Structured Streaming의 핵심 개념. → Structured Streaming
Late Data
이벤트 시간 기준으로 늦게 도착하는 데이터. Watermark로 처리 여부를 결정한다. → Structured Streaming
Micro-Batch
스트림 데이터를 작은 배치로 처리하는 Structured Streaming의 기본 모드. → Structured Streaming
Output Mode
스트림 결과를 출력하는 방식. append(새 행), complete(전체), update(변경분) 모드가 있다. → Structured Streaming
Session Window
활동 기반 동적 윈도우. 비활성 시간이 지나면 세션이 종료된다. → Structured Streaming
Sliding Window
겹치는 시간 윈도우. 윈도우 크기와 슬라이드 간격을 각각 지정한다. → Structured Streaming
State Store
Structured Streaming에서 집계 상태를 저장하는 저장소. RocksDB 또는 메모리 기반. → Structured Streaming
Trigger
스트림 처리가 언제 실행될지 결정하는 설정. → Structured Streaming
Tumbling Window
겹치지 않는 고정 크기 시간 윈도우. 각 이벤트는 정확히 하나의 윈도우에 속한다. → Structured Streaming
Watermark
늦게 도착하는 데이터를 처리하기 위한 지연 허용 시간 설정. → Structured Streaming
Window
시간 기반 그룹화를 위한 연산. Tumbling, Sliding, Session Window가 있다. → Structured Streaming
스트리밍 용어 요약
- Micro-Batch: 스트림을 작은 배치로 나눠 처리 (기본 모드)
- Trigger: 처리 주기 설정 (예: 10초마다, 한 번만)
- Watermark: 늦은 데이터 허용 시간 (예: 10분까지 기다림)
- Window: 시간 기반 그룹화 (Tumbling: 고정, Sliding: 겹침, Session: 활동 기반)
머신러닝 용어#
CrossValidator
교차 검증을 통해 하이퍼파라미터를 튜닝하는 MLlib 컴포넌트. → MLlib
Estimator
fit() 메서드로 학습하여 Transformer를 생성하는 알고리즘. → MLlib
Evaluator
모델 성능을 평가하는 컴포넌트. BinaryClassificationEvaluator, RegressionEvaluator 등. → MLlib
Feature Engineering
원시 데이터를 머신러닝 모델에 적합한 특성으로 변환하는 과정. → MLlib
OneHotEncoder
범주형 변수를 이진 벡터로 변환하는 MLlib Transformer. → MLlib
ParamGrid
하이퍼파라미터 조합을 정의하는 그리드. CrossValidator와 함께 사용. → MLlib
Pipeline
여러 Estimator와 Transformer를 연결한 워크플로우. → MLlib
StandardScaler
특성을 표준화(평균 0, 분산 1)하는 MLlib Transformer. → MLlib
StringIndexer
문자열 레이블을 숫자 인덱스로 변환하는 MLlib Estimator. → MLlib
Transformer
transform() 메서드로 데이터를 변환하는 컴포넌트. → MLlib
VectorAssembler
여러 컬럼을 하나의 특성 벡터로 결합하는 MLlib Transformer. → MLlib
머신러닝 용어 요약
- Estimator: 데이터를 학습하여 모델(Transformer) 생성 →
fit()- Transformer: 데이터를 변환 →
transform()- Pipeline: 여러 단계를 연결한 ML 워크플로우
- 흐름:
Estimator.fit(data) → Transformer.transform(data)
설정 관련#
AQE (Adaptive Query Execution)
런타임에 쿼리 계획을 동적으로 최적화하는 기능. Spark 3.0+에서 사용 가능. → 성능 튜닝
Broadcast Join
작은 테이블을 모든 노드에 배포하여 Shuffle 없이 조인하는 방식. → 성능 튜닝
CBO (Cost-Based Optimization)
테이블 통계를 기반으로 최적의 실행 계획을 선택하는 최적화 기법. → 성능 튜닝
Dynamic Allocation
워크로드에 따라 Executor 수를 자동으로 조절하는 기능. → 성능 튜닝, 배포와 클러스터 관리
설정 관련 용어 요약
- AQE: 런타임 쿼리 최적화 (Spark 3.0+, 파티션 자동 조정, 스큐 조인 해결)
- Broadcast Join: 작은 테이블을 모든 노드에 복제하여 셔플 없이 조인
- CBO: 테이블 통계 기반 최적 실행 계획 선택
- Dynamic Allocation: 워크로드에 따라 Executor 수 자동 조절