스파크 개요 (Overview)
스파크 개요 (Overview)
Spark를 처음 접하는 분이라면, 우선 이 문서가 어떤 걸 다루는지 짚고 넘어갈게요. 이 페이지는 Apache Spark의 공식 문서 첫 관문으로, Spark를 어디서 받아서 어떻게 실행하고, 어떤 문서들을 따라가면 되는지를 한 번에 보여줍니다. 자세한 개념 설명보다는 "어디서 뭘 시작하면 되는지"의 지도 역할을 하는 문서예요.
다운로드 (Downloading)
Spark는 프로젝트 웹사이트의 다운로드 페이지에서 받을 수 있어요. 이 문서는 Spark 4.2.0 버전을 기준으로 합니다.
몇 가지 용어가 낯설 수 있는데, 짚고 넘어갈게요.
- Spark는 HDFS와 YARN을 쓸 때 Hadoop의 클라이언트 라이브러리를 사용해요. 그래서 다운로드 파일이 유명한 몇 가지 Hadoop 버전에 맞춰 미리 패키징되어 있고, "Hadoop free" 바이너리를 받아서 Spark의 클래스패스를 보강하는 방식(hadoop-provided 참고)으로 어떤 Hadoop 버전이든 붙여 쓸 수도 있어요.
- Scala와 Java 사용자는 Maven 좌표(coordinates)로 프로젝트에 Spark를 추가하고, Python 사용자는 PyPI에서 Spark를 설치하면 돼요.
소스에서 직접 빌드하고 싶다면 Building Spark 문서를 보면 됩니다.
Spark는 Windows와 UNIX 계열(예: Linux, macOS) 양쪽에서 돌아가고, 지원되는 Java 버전이 실행되는 플랫폼이라면 사실상 어디서든 돌아간다고 보시면 돼요. 여기에는 x86_64와 ARM64 JVM이 모두 포함됩니다. 로컬 한 대에서도 실행이 아주 쉽습니다. PATH에 java가 있거나, JAVA_HOME 환경 변수가 자바 설치 위치를 가리키기만 하면 되거든요.
구동 환경 요구 사항을 정리하면 이렇습니다.
- Java 17/21/25
- Scala 2.13
- Python 3.10+
- R 4.0+ (더 이상 권장하지 않음, Deprecated)
참고로 Spark 4.2.0부터는 25.0.3 이전 버전의 Java 25 지원이 deprecated로 분류돼요. 또 한 가지 중요한 점이 있는데, Scala API를 쓸 때는 애플리케이션이 Spark가 컴파일된 것과 같은 Scala 버전을 사용해야 합니다. Spark 4.0.0부터 그 버전이 Scala 2.13이에요.
예제와 셸 실행하기 (Running the Examples and Shell)
Spark에는 몇 가지 샘플 프로그램이 들어 있습니다. Python, Scala, Java, R 예제는 examples/src/main 디렉터리에 있어요.
Python 인터프리터에서 Spark를 대화형으로 실행하려면 bin/pyspark를 사용해요.
./bin/pyspark --master "local[2]"
샘플 애플리케이션은 Python으로 제공되기도 하는데, 예를 들면 이렇게 실행합니다.
./bin/spark-submit examples/src/main/python/pi.py 10
Scala나 Java 샘플 프로그램을 돌릴 때는 Spark 최상위 디렉터리에서 bin/run-example <class> [params]를 쓰면 돼요. (내부적으로는 애플리케이션 실행용 일반 스크립트인 spark-submit을 호출합니다.) 예를 들면 이런 식이에요.
./bin/run-example SparkPi 10
Scala 셸의 변형 버전으로도 대화형 실행을 할 수 있는데, 이게 프레임워크를 익히기에 아주 좋은 방법입니다.
./bin/spark-shell --master "local[2]"
여기서 --master 옵션은 분산 클러스터의 master URL을 지정해요. 또는 local로 한 스레드에서 로컬 실행, local[N]으로 N개 스레드에서 로컬 실행을 정할 수 있습니다. 처음엔 테스트 용도로 local부터 시작하는 걸 권장해요. 전체 옵션 목록을 보려면 Spark 셸을 --help 옵션으로 실행하면 됩니다.
Spark는 1.4 버전부터 R API도 제공해요 (DataFrame API만 포함됩니다). R 인터프리터에서 대화형으로 실행하려면 bin/sparkR을 사용합니다.
./bin/sparkR --master "local[2]"
R로 된 예제 애플리케이션도 준비되어 있어요.
./bin/spark-submit examples/src/main/r/dataframe.R
Spark Connect로 어디서든 클라이언트 애플리케이션 실행하기
Spark Connect는 Spark 3.4에서 도입된 새로운 클라이언트-서버 아키텍처예요. Spark 클라이언트 애플리케이션을 분리(decouple)해서 Spark 클러스터에 원격으로 연결할 수 있게 해줍니다. 클라이언트와 서버를 분리함으로써 Spark와 그 생태계를 어디서든, 어떤 애플리케이션에든 내장해서 활용할 수 있게 되는 거죠. Spark 3.4에서는 Spark Connect가 PySpark용 DataFrame API와 Scala의 DataFrame/Dataset API를 지원해요.
Spark Connect에 대해 더 자세히 배우고 싶으면 Spark Connect Overview를 보세요.
클러스터에서 실행하기 (Launching on a Cluster)
클러스터에서 실행할 때의 핵심 개념은 클러스터 모드 개요 문서에서 설명합니다. Spark는 단독으로도, 기존의 여러 클러스터 매니저 위에서도 실행할 수 있어요. 현재 제공되는 배포(deployment) 옵션은 이렇습니다.
- Standalone Deploy Mode: 프라이빗 클러스터에 Spark를 배포하는 가장 간단한 방법
- Hadoop YARN
- Kubernetes
여기서부터 어디로 가면 될까요 (Where to Go from Here)
Spark가 처음이라면 아래 가이드를 순서대로 따라가 보세요.
프로그래밍 가이드:
- Quick Start: Spark API를 빠르게 훑는 입문서예요. 여기서 시작하세요!
- RDD Programming Guide: Spark 기본 개념 — RDD(핵심 API지만 예전 API), accumulator, broadcast variable 개요
- Spark SQL, Datasets, and DataFrames: 관계형 쿼리로 정형 데이터를 처리 (RDD보다 최신 API)
- Structured Streaming: Datasets와 DataFrames를 이용해 정형 데이터 스트림을 처리 (DStream보다 최신 API)
- Spark Streaming: DStream으로 데이터 스트림 처리 (예전 API)
- MLlib: 머신러닝 알고리즘 적용
- GraphX: 그래프 처리
- SparkR (Deprecated): R로 Spark에서 데이터 처리
- PySpark: Python으로 Spark에서 데이터 처리
- Spark SQL CLI: 명령줄에서 SQL로 데이터 처리
- Declarative Pipelines: 여러 테이블을 만들고 유지하는 데이터 파이프라인 구축
API 문서:
- Spark Python API (Sphinx)
- Spark Scala API (Scaladoc)
- Spark Java API (Javadoc)
- Spark R API (Roxygen2)
- Spark SQL, Built-in Functions (MkDocs)
배포 가이드:
- Cluster Overview: 클러스터 실행 시 개념과 구성 요소 개요
- Submitting Applications: 애플리케이션 패키징과 배포
- 배포 모드:
- Standalone Deploy Mode: 서드파티 클러스터 매니저 없이 독립 클러스터를 빠르게 구성
- YARN: Hadoop NextGen(YARN) 위에 Spark 배포
- Kubernetes: Kubernetes 위에 직접 Spark 앱 배포
- Amazon EC2: 약 5분 만에 EC2에 클러스터를 구성하는 스크립트
- Spark Kubernetes Operator:
- SparkApp: operator 패턴으로 Kubernetes 위에 Spark 앱 배포
- SparkCluster: operator 패턴으로 Kubernetes 위에 Spark 클러스터 배포
기타 문서:
- Configuration: Spark의 구성 시스템으로 커스터마이징
- Monitoring: 애플리케이션 동작 추적
- Web UI: 애플리케이션의 유용한 정보 확인
- Tuning Guide: 성능과 메모리 사용을 최적화하는 모범 사례
- Job Scheduling: Spark 애플리케이션 내부/외부의 리소스 스케줄링
- Security: Spark 보안 지원
- Hardware Provisioning: 클러스터 하드웨어 추천
- 다른 스토리지 시스템과의 통합:
- Migration Guide: Spark 컴포넌트용 마이그레이션 가이드
- Building Spark: Maven 시스템으로 Spark 빌드
- Contributing to Spark
- Third Party Projects: 관련 서드파티 Spark 프로젝트
외부 리소스:
- Spark Homepage
- Spark Community: 로컬 밋업 포함 커뮤니티 자료
- StackOverflow tag
apache-spark - Mailing Lists: 여기서 Spark 관련 질문을 주고받을 수 있어요
- AMP 캠프: UC Berkeley에서 열린 일련의 트레이닝 캠프로, Spark, Spark Streaming, Mesos 등을 다뤘어요. 동영상이 온라인에서 무료로 제공됩니다.
- Code Examples: Spark의
examples서브폴더에도 더 많은 예제가 있어요 — Python, Scala, Java, R
이 문서는 사실상 "Spark 공식 문서로 들어가는 출입구"예요. 개념 하나하나보다는 무엇을 어디서 시작할지가 핵심이므로, 처음엔 Quick Start를 열어보고 Spark가 실제로 도는 걸 확인한 뒤, 필요한 주제의 가이드로 이동하면 됩니다.