스파크

Apache Spark는 대규모 데이터를 빠르게 처리하는 오픈소스 분산 컴퓨팅 프레임워크로, 인메모리 처리와 통합 라이브러리로 빅데이터 표준으로 자리잡았다.

스파크

개요

Apache Spark는 대규모 데이터를 효율적으로 처리하기 위한 통합 분석 엔진이자 오픈소스 분산 컴퓨팅 프레임워크이다. 맵리듀스의 한계를 극복하고자 2009년 UC 버클리 AMPLab에서 시작되었으며, 인메모리 기반의 처리 방식을 통해 반복적인 알고리즘과 대화형 질의를 수십 배에서 수백 배까지 빠르게 수행한다. 현재는 빅데이터 플랫폼의 사실상 표준으로서, 데이터 엔지니어링, 실시간 스트리밍, 머신러닝 등 다양한 워크로드를 한 곳에서 처리할 수 있게 한다.

주요 내용

배경과 탄생

Spark는 하둡 맵리듀스의 느린 디스크 기반 처리와 복잡한 구현 방식을 개선하기 위해 개발되었다. RDD(Resilient Distributed Dataset) 개념을 도입하여 데이터를 메모리에 유지하고, 장애 발생 시 계보(lineage)를 통해 복구하는 방식을 채택했다. 이후 Spark SQL, Spark Streaming, MLlib, GraphX 등이 통합되면서 배치 처리, 실시간 처리, 머신러닝, 그래프 처리를 단일 애플리케이션에서 결합할 수 있게 되었다.

핵심 아키텍처

Spark는 마스터-슬레이브 구조를 기반으로 하며, 드라이버 프로그램과 다수의 익스큐터로 구성된다.

  • 드라이버(Driver): 사용자의 main 함수를 실행하고 SparkContext를 생성하며 작업을 분할하고 스케줄링한다. 사용자 코드와 스테이지 실행 계획을 관리하고, 각 익스큐터의 상태를 수집한다.
  • 익스큐터(Executor): 드라이버의 지시에 따라 실제 작업을 실행하는 프로세스로, 각 노드에서 여러 개가 실행된다. 데이터를 메모리에 저장하거나 계산하고, 결과를 드라이버에 전송한다.
  • 클러스터 매니저(Cluster Manager): 리소스 할당을 담당하며, Spark 스탠드얼론, YARN, Mesos, Kubernetes를 지원한다.

데이터 추상화: RDD, DataFrame, Dataset

  • RDD: 기본 저수준 API로, 불변·분산·병렬적인 요소의 컬렉션이다. 계산 지연과 함께 복구 가능한 특성을 가진다.
  • DataFrame: 스키마가 있는 적은 행과 열로 구성된 분산 데이터 셋으로, SQL에 익숙한 사용자도 쉽게 다룰 수 있다. 많은 최적화가 적용되어 높은 성능을 보인다.
  • Dataset: 타입 세이프한 RDD와 DataFrame의 장점을 결합한 것. 정적 타입을 지원하고 인코더를 통해 직렬화 비용을 줄였다. 현재는 Dataset이 주로 권장된다.

트랜스포메이션과 액션

Spark는 지연 평가(lazy evaluation) 방식을 사용한다. 트랜스포메이션(예: map, filter, join)은 실행 계획을 만들고, 액션(예: count, collect, save)이 호출될 때까지는 실제 연산을 하지 않는다. 이를 통해 불필요한 I/O를 줄이고 캐싱이나 재사용을 극대화한다.

핵심 라이브러리

  • Spark SQL: 구조화된 데이터 처리와 SQL 쿼리를 지원하며, 데이터 소스로는 Parquet, ORC, Hive, JDBC 등이 가능하다. JDBC 데이터소스를 통해 별도 웨어하우스에 데이터를 연결할 수도 있다.
  • Spark Streaming: 초기의 마이크로 배치 방식에서 시작해, 2.3버전부터는 구조적 스트리밍(Structured Streaming)이 등장해 이벤트 시간 기반의 정확한 처리를 지원한다. 카프카, Flume, Kinesis 등의 데이터 소스를 연동할 수 있다.
  • MLlib: 확장 가능한 머신러닝 라이브러리로, 분류, 회귀, 클러스터링, 추천, 파이프라인 등을 제공한다. 스파크의 데이터프레임 기반으로 통합되었다.
  • GraphX: 그래프 계산과 그래프 알고리즘을 제공하는 API이지만, 현재는 GraphFrames로 대체되는 추세이다.

배포와 실행 모드

로컬 모드뿐 아니라 클러스터 모드에서 실행 가능하며, 다른 클러스터 매니저에 걸쳐 배포할 수 있다. 특히 쿠버네티스 지원이 강화되어 클라우드 네이티브 환경에서의 유연한 배포가 가능해졌다.

최신 동향

2024-2025년 기준 스파크 프로젝트는 적극적으로 발전하고 있다. 스파크 3.5가 2023년에 릴리스되었고, 4.0 버전은 2025년에 공개될 예정이다. 4.0부터는 유니파이드 플래닝(Unified Planning)이 도입되고 비결정적 연산의 개선, ANSI SQL 지원 강화, 고급 성능 최적화(퀀텀 플러그인 등)가 포함된다. 또한 딥 러닝 워크로드를 위해 GPGPU 가속을 지원하는 등 확장성에 초점을 맞추고 있다.

데이터브릭스(Databricks)의 Delta Lake는 스파크 위에 트랜잭션 레이어를 제공하며, 레이크하우스 아키텍처의 핵심으로 자리잡고 있다. 메달리온 아키텍처를 포함한 델타 레이크의 사용이 일반적인 데이터 설계 패턴으로 인정되고 있다.

스파크 스트리밍에서는 구조적 스트리밍이 안정화되어 실시간 데이터 파이프라인의 주류로 사용된다. 특히 카프카와 함께 쓰이는 경우가 많으며, 2024년 기준으로 데이터 스트리밍이 포함된 통합 데이터 엔지니어링이 더욱 세분화되고 있다.

또한 이제 스파크는 클라우드 기반 매니지드 서비스(SageMaker, EMR, Dataproc, Azure Synapse 등)로 널리 제공되어 사용자의 진입 장벽이 크게 낮아졌다. 오픈소스 생태계는 지속적으로 성장하고 있으며, 데이터 처리와 AI/머신러닝 간의 통합 워크로드가 강조된다.

관련 주제

  • [[빅데이터]]
  • [[Hadoop]]
  • [[데이터브릭스]]
  • [[구조적 스트리밍]]
  • [[MLlib]]
  • [[클라우드 컴퓨팅]]