Apache Spark 개념
Apache Spark는 대규모 데이터를 빠르게 처리하고 분석하기 위해 만들어진 오픈 소스 분산 컴퓨팅 프레임워크임.
탄탄한 메모리 기반의 처리 성능과 유연한 API로 빅데이터 생태계에서 핵심적인 위치를 차지하고 있음.
Apache Spark 탄생 배경과 특징
1. 탄생 배경
초기 빅데이터 처리는 주로 Hadoop MapReduce가 담당했으나, 반복 연산이나 실시간·대화형 분석에 상대적으로 부적합했음(디스크 기반 처리, 반복 작업 시 I/O 부담 등이 크기 때문).
Spark는 UC Berkeley AMP Lab에서 메모리에 최적화된 고속 분산 처리 엔진을 구현하기 위해 시작된 프로젝트로, 이후 Apache Software Foundation에 기여되어 활발하게 발전해 왔음.
2. 주요 특징
고속 처리: 메모리를 적극 활용해 디스크 I/O를 최소화함으로써 반복 계산(예: 머신러닝 알고리즘)이나 대화형 분석에서 빠른 성능을 보장함.
다양한 언어 지원: Scala, Python, Java, R 등 여러 언어로 애플리케이션을 개발할 수 있음.
통합된 API: Spark SQL, Spark Streaming, MLlib, GraphX 등 여러 라이브러리를 일관된 프레임워크 하에서 사용할 수 있음.
유연성: 배치 작업뿐만 아니라 실시간 스트리밍, 그래프 처리, 대화형 쿼리 등 다양한 워크로드를 하나의 런타임에서 처리할 수 있음.
Spark 아키텍처와 실행 모델
Spark는 분산 환경에서 작업을 수행하기 위해 클러스터 매니저와 연동하여, 드라이버(Driver)와 익스큐터(Executor) 프로세스를 배치하여 작업을 실행함.
1. 드라이버(Driver)
Spark 애플리케이션을 제출하면, 클라이언트 코드에서 드라이버 프로세스가 생성됨.
드라이버는 전체 애플리케이션 실행을 관리하고, 사용자 코드(트랜스포메이션, 액션 등)를 파싱하여 DAG(Directed Acyclic Graph) 스케줄러를 통해 태스크 단위로 분할하고 스케줄링을 수행함.
클러스터 매니저에게 자원을 요청해 익스큐터를 할당받고, 태스크를 익스큐터에 분배함.
2. 익스큐터(Executor)
실제 태스크를 수행하는 프로세스이며, JVM 기반으로 동작함.
메모리와 CPU 코어를 배정받아 RDD(또는 DataFrame, Dataset 등)의 파티션 데이터를 처리하고, 처리 결과를 드라이버로 보고함.
각 익스큐터는 자신만의 메모리 공간을 가지고, 데이터 캐시 및 중간 결과물을 저장할 수 있음.
3. 클러스터 매니저(Cluster Manager)
Spark는 Standalone 모드(자체 매니저), YARN, Apache Mesos, Kubernetes 등 다양한 리소스 매니저와 연동 가능함.
드라이버의 자원 요청을 받아, 적절한 워커 노드(Executor)를 할당함.
Spark의 핵심 추상화: RDD, DataFrame, Dataset
Spark는 다양한 추상화 레벨을 제공함.
Spark 1.x 시절에는 주로 RDD(Resilient Distributed Dataset)를 사용했고, Spark 2.x 이후로는 DataFrame과 Dataset API가 추가됨.
1. RDD (Resilient Distributed Dataset)
Spark의 가장 기초적인 데이터 추상화로, 불변(immutable)하며 분산된 컬렉션 형태임.
트랜스포메이션(Transformation)과 액션(Action) 오퍼레이션을 제공하며, 이러한 연산들은 지연 평가(lazy evaluation) 방식으로 실행 계획을 쌓다가 액션이 호출될 때 실제 계산이 수행됨.
RDD는 안정성(Resilient)을 위해 라인리지(Lineage) 정보를 유지함.
실패가 발생하면 라인리지를 통해 이전 단계로부터 재연산하여 데이터를 복구함.
2. DataFrame
스키마를 가진 RDD라고 볼 수 있으며, SQL 테이블과 유사하게 컬럼별로 구조화된 데이터를 다룰 수 있음.
Spark SQL 엔진의 카탈리스트 옵티마이저(Catalyst Optimizer)와 텅스텐(Tungsten) 프로젝트를 통해 실행 계획을 최적화하기 때문에, RDD보다 효율적이고 풍부한 API를 제공함.
스키마 정보를 사용해 컬럼 단위로 데이터를 효율적으로 처리하고, SQL 문법을 사용할 수도 있음.
3. Dataset
DataFrame의 스키마 정보를 유지하면서, 타입 안정성(Type-safety)까지 제공하는 추상화임.
Scala/Java에서는 Dataset 타입을 사용해 컴파일 타임에 컬럼 타입을 확인할 수 있음(“Encoder”를 통해 객체를 직렬화/역직렬화).
실시간 검증과 옵티마이징이 가능하며, DataFrame보다 타입 안정성이라는 이점이 있음(단, Python/R에서는 Dataset 대신 DataFrame API를 주로 사용).
RDD 연산 모델: Transformation & Action
Spark 코드를 작성할 때, 가장 중요한 특성 중 하나가 지연 평가(lazy evaluation)임.
RDD, DataFrame, Dataset 모두 내부적으로 지연 평가를 사용함.
1. Transformation
기존 RDD(혹은 DataFrame 등)를 변환해 새로운 RDD를 반환하는 연산.
예: map(), filter(), flatMap(), union(), join(), groupByKey(), reduceByKey() 등
Transformation은 즉시 실행되지 않고, DAG 스케줄러에 실행 계획을 추가만 함.
2. Action
실제 결과를 반환하거나 외부 저장소에 쓰는 연산.
예: collect(), count(), take(), saveAsTextFile(), reduce() 등.
Action이 호출될 때 비로소 DAG가 실행되어 클러스터 상에서 태스크가 수행됨.
이 구조 덕분에 Spark는 사용자가 요청하는 최종 액션에 맞춰 전체 연산을 최적화할 수 있음.
Spark SQL과 카탈리스트 옵티마이저
1. Spark SQL
DataFrame이나 Dataset에 대해 SQL 언어를 사용해 질의할 수 있는 인터페이스를 제공함.
SparkSession을 통해 SQL 컨텍스트를 얻고, sql() API를 이용해 SQL 문장을 실행할 수 있음.
2. 카탈리스트 옵티마이저 (Catalyst Optimizer)
Spark SQL의 핵심 엔진으로, SQL 쿼리 혹은 DataFrame API 코드를 효과적으로 파싱하고 최적화하여 실행 플랜을 만듬.
논리 계획 → 논리 최적화 → 물리 계획 → 코드 생성(Codegen) 과정을 거쳐 최대한 효율적으로 실행함.
예를 들어 불필요한 컬럼 제거, 필터 푸시다운, 조인 순서 최적화 등을 수행하여 성능을 향상함.
Spark Streaming과 Structured Streaming
1. Spark Streaming (DStreams)
Spark 1.x 시절 도입된 마이크로 배치 기반 스트리밍 라이브러리임.
실시간 데이터를 짧은 배치 단위(예: 1초, 5초 등)로 수집하여, RDD 연산을 빠르게 반복함으로써 스트리밍을 처리함.
2. Structured Streaming
Spark 2.x 이후로 권장되는 새로운 스트리밍 엔진임.
DataFrame/Dataset API와 동일한 구조를 사용하여 스트리밍 데이터를 테이블처럼 처리할 수 있음.
트리거(trigger) 단위로 지속적으로 처리를 수행하며, 단순 마이크로 배치를 넘어선 “Continuous Processing” 모드도 가능함.
Exactly-once 처리(상황에 따라)와 같은 강력한 스트리밍 보장과 더불어, 배치/스트리밍 통합 API를 제공함.
MLLib, GraphX등 고급 라이브러리
Spark는 단순 배치나 SQL 쿼리 외에도 데이터 과학이나 그래프 분석 등 다양한 영역에 특화된 라이브러리를 제공함.
1. MLLib
머신러닝 알고리즘과 통계 함수를 지원하는 라이브러리.
회귀분석, 분류, 클러스터링, 추천 알고리즘, 피처 변환 등 다양한 알고리즘을 분산 환경에서 쉽게 활용할 수 있음.
Spark 2.x 이후에는 DataFrame 기반 API(ml 패키지)가 주로 사용됨.
2. GraphX
그래프 형태의 대규모 데이터를 분산 처리하기 위한 라이브러리.
정점(Vertex)과 간선(Edge)으로 구성된 그래프를 RDD 형태로 추상화하여, PageRank나 Connected Components 등의 그래프 알고리즘을 효율적으로 수행할 수 있음.
3. SparkR
R 언어 사용자를 위해 제공되는 라이브러리.
DataFrame 기반의 분산 처리와 머신러닝을 R 인터페이스에서 사용할 수 있음.
Spark의 최적화와 자원 활용
1. 메모리 사용 최적화
Spark는 대개 메모리 기반 처리로 빠른 성능을 제공하지만, 메모리가 부족하면 디스크를 사용해 스필(spill)할 수 있음.
Executor 메모리를 적절히 설정하고, 캐싱 전략(RDD Cache, DataFrame Cache) 등을 활용해 성능을 높일 수 있음.
2. 파티셔닝(partitioning) 전략
RDD나 DataFrame은 여러 파티션으로 분산되어 저장됨.
올바른 파티셔닝(예: shuffle 파티셔닝, coalesce, repartition 등)을 통해 데이터 이동(shuffle)을 최소화하고 성능을 개선할 수 있음.
3. 셔플(shuffle) 최적화
reduceByKey()나 join() 같은 연산은 셔플이 발생하여 비용이 크게 들 수 있음.
Spark 3.x부터는 Adaptive Query Execution(AQE)가 도입되어 런타임 중 셔플 파티션 수를 동적으로 조정하는 등 최적화가 자동화됨.
4. 클러스터 자원 설정
Spark-submit 시, --executor-memory, --executor-cores, --num-executors 등의 파라미터를 적절히 설정해야 함.
작업 유형(배치, 스트리밍, 머신러닝, SQL)에 따라 자원 배분이 달라질 수 있음.
실제 운영 환경에서의 Spark
1. 배포 모드
Standalone: Spark 자체의 Resource Manager를 사용하는 가장 단순한 구조.
YARN: Hadoop과 함께 사용하는 경우가 많으며, 기존 하둡 생태계와 잘 호환됨.
Mesos/Kubernetes: 대규모 컨테이너 오케스트레이션 환경에서의 운영을 지원.
2. 모니터링과 디버깅
Spark UI: DAG, 스테이지, 태스크 단위로 실행 상태, 메모리 사용량, 셔플 발생 등을 확인 가능.
로그 수집 및 모니터링 툴과 연동(예: ELK 스택, Grafana, Prometheus 등)하여 메트릭을 실시간 추적.
3. 보안과 멀티 유저
Kerberos, SSL/TLS, ACL 설정 등을 사용해 Spark 클러스터와 데이터 접근 권한을 제어할 수 있음.
Spark Thrift 서버 등을 사용하면 여러 사용자가 동시에 Spark SQL 작업을 수행할 수 있음.
4. 데이터 소스 연동
HDFS, Hive, Cassandra, HBase, JDBC, S3 등 다양한 데이터 소스/싱크 연동 지원.
Spark SQL을 통해 메타데이터 관리, 파케이(Parquet)나 ORC 같은 컬럼 포맷 활용 등으로 성능 향상.
정리
Apache Spark는 대규모 데이터 처리에 있어서 사실상 표준으로 자리매김했으며, 다음과 같은 장점을 통해 빅데이터 워크로드의 대부분을 커버할 수 있음.
1. 성능: 메모리 기반의 고속 처리, 강력한 최적화 엔진
2. 다양성: 배치, 스트리밍, 머신러닝, 그래프 분석을 단일 프레임워크에서 처리 가능
3. 유연성: Scala, Python, R, Java 등 여러 언어 지원, 다양한 클러스터 매니저와 연동
최신 버전에서는 AQE(Adaptive Query Execution), GPU 가속, Lakehouse 아키텍처(Delta Lake, Apache Iceberg 등과 결합) 등의 기능이 더해져, 빅데이터 처리 및 분석의 사실상 중심 축으로 더욱 자리 잡고 있음.
또한 Spark Connect 등 신규 프로젝트를 통해 Spark 클라이언트-서버 구조 개선 역시 빠르게 진행되고 있음.
결국 Apache Spark는 단순히 분산 배치 처리를 넘어, 통합 데이터 처리 엔진으로서 머신러닝 및 실시간 분석, 대화형 SQL 질의 등 다양한 시나리오에 적용 가능함.
대규모 분산 데이터 처리 환경을 설계, 개발, 운영해야 하는 전문가에게는 Spark의 내부 구조와 최적화 기법, 자원 관리 전략 등을 깊이 이해하는 것이 필수적임.
'Data Engineering > Spark' 카테고리의 다른 글
[Spark] Pyspark에서 repartition(), coalesce() 사용 (0) | 2025.03.29 |
---|---|
[Spark] Disk Spill (0) | 2025.03.28 |
[Spark] SparkSQL의 Window함수 종류 (1) | 2025.03.22 |
[Spark] Apache Spark 구조 (2) | 2025.03.15 |
[Spark] Apache Iceberg (2) | 2025.03.14 |
Apache Spark 개념
Apache Spark는 대규모 데이터를 빠르게 처리하고 분석하기 위해 만들어진 오픈 소스 분산 컴퓨팅 프레임워크임.
탄탄한 메모리 기반의 처리 성능과 유연한 API로 빅데이터 생태계에서 핵심적인 위치를 차지하고 있음.
Apache Spark 탄생 배경과 특징
1. 탄생 배경
초기 빅데이터 처리는 주로 Hadoop MapReduce가 담당했으나, 반복 연산이나 실시간·대화형 분석에 상대적으로 부적합했음(디스크 기반 처리, 반복 작업 시 I/O 부담 등이 크기 때문).
Spark는 UC Berkeley AMP Lab에서 메모리에 최적화된 고속 분산 처리 엔진을 구현하기 위해 시작된 프로젝트로, 이후 Apache Software Foundation에 기여되어 활발하게 발전해 왔음.
2. 주요 특징
고속 처리: 메모리를 적극 활용해 디스크 I/O를 최소화함으로써 반복 계산(예: 머신러닝 알고리즘)이나 대화형 분석에서 빠른 성능을 보장함.
다양한 언어 지원: Scala, Python, Java, R 등 여러 언어로 애플리케이션을 개발할 수 있음.
통합된 API: Spark SQL, Spark Streaming, MLlib, GraphX 등 여러 라이브러리를 일관된 프레임워크 하에서 사용할 수 있음.
유연성: 배치 작업뿐만 아니라 실시간 스트리밍, 그래프 처리, 대화형 쿼리 등 다양한 워크로드를 하나의 런타임에서 처리할 수 있음.
Spark 아키텍처와 실행 모델
Spark는 분산 환경에서 작업을 수행하기 위해 클러스터 매니저와 연동하여, 드라이버(Driver)와 익스큐터(Executor) 프로세스를 배치하여 작업을 실행함.
1. 드라이버(Driver)
Spark 애플리케이션을 제출하면, 클라이언트 코드에서 드라이버 프로세스가 생성됨.
드라이버는 전체 애플리케이션 실행을 관리하고, 사용자 코드(트랜스포메이션, 액션 등)를 파싱하여 DAG(Directed Acyclic Graph) 스케줄러를 통해 태스크 단위로 분할하고 스케줄링을 수행함.
클러스터 매니저에게 자원을 요청해 익스큐터를 할당받고, 태스크를 익스큐터에 분배함.
2. 익스큐터(Executor)
실제 태스크를 수행하는 프로세스이며, JVM 기반으로 동작함.
메모리와 CPU 코어를 배정받아 RDD(또는 DataFrame, Dataset 등)의 파티션 데이터를 처리하고, 처리 결과를 드라이버로 보고함.
각 익스큐터는 자신만의 메모리 공간을 가지고, 데이터 캐시 및 중간 결과물을 저장할 수 있음.
3. 클러스터 매니저(Cluster Manager)
Spark는 Standalone 모드(자체 매니저), YARN, Apache Mesos, Kubernetes 등 다양한 리소스 매니저와 연동 가능함.
드라이버의 자원 요청을 받아, 적절한 워커 노드(Executor)를 할당함.
Spark의 핵심 추상화: RDD, DataFrame, Dataset
Spark는 다양한 추상화 레벨을 제공함.
Spark 1.x 시절에는 주로 RDD(Resilient Distributed Dataset)를 사용했고, Spark 2.x 이후로는 DataFrame과 Dataset API가 추가됨.
1. RDD (Resilient Distributed Dataset)
Spark의 가장 기초적인 데이터 추상화로, 불변(immutable)하며 분산된 컬렉션 형태임.
트랜스포메이션(Transformation)과 액션(Action) 오퍼레이션을 제공하며, 이러한 연산들은 지연 평가(lazy evaluation) 방식으로 실행 계획을 쌓다가 액션이 호출될 때 실제 계산이 수행됨.
RDD는 안정성(Resilient)을 위해 라인리지(Lineage) 정보를 유지함.
실패가 발생하면 라인리지를 통해 이전 단계로부터 재연산하여 데이터를 복구함.
2. DataFrame
스키마를 가진 RDD라고 볼 수 있으며, SQL 테이블과 유사하게 컬럼별로 구조화된 데이터를 다룰 수 있음.
Spark SQL 엔진의 카탈리스트 옵티마이저(Catalyst Optimizer)와 텅스텐(Tungsten) 프로젝트를 통해 실행 계획을 최적화하기 때문에, RDD보다 효율적이고 풍부한 API를 제공함.
스키마 정보를 사용해 컬럼 단위로 데이터를 효율적으로 처리하고, SQL 문법을 사용할 수도 있음.
3. Dataset
DataFrame의 스키마 정보를 유지하면서, 타입 안정성(Type-safety)까지 제공하는 추상화임.
Scala/Java에서는 Dataset 타입을 사용해 컴파일 타임에 컬럼 타입을 확인할 수 있음(“Encoder”를 통해 객체를 직렬화/역직렬화).
실시간 검증과 옵티마이징이 가능하며, DataFrame보다 타입 안정성이라는 이점이 있음(단, Python/R에서는 Dataset 대신 DataFrame API를 주로 사용).
RDD 연산 모델: Transformation & Action
Spark 코드를 작성할 때, 가장 중요한 특성 중 하나가 지연 평가(lazy evaluation)임.
RDD, DataFrame, Dataset 모두 내부적으로 지연 평가를 사용함.
1. Transformation
기존 RDD(혹은 DataFrame 등)를 변환해 새로운 RDD를 반환하는 연산.
예: map(), filter(), flatMap(), union(), join(), groupByKey(), reduceByKey() 등
Transformation은 즉시 실행되지 않고, DAG 스케줄러에 실행 계획을 추가만 함.
2. Action
실제 결과를 반환하거나 외부 저장소에 쓰는 연산.
예: collect(), count(), take(), saveAsTextFile(), reduce() 등.
Action이 호출될 때 비로소 DAG가 실행되어 클러스터 상에서 태스크가 수행됨.
이 구조 덕분에 Spark는 사용자가 요청하는 최종 액션에 맞춰 전체 연산을 최적화할 수 있음.
Spark SQL과 카탈리스트 옵티마이저
1. Spark SQL
DataFrame이나 Dataset에 대해 SQL 언어를 사용해 질의할 수 있는 인터페이스를 제공함.
SparkSession을 통해 SQL 컨텍스트를 얻고, sql() API를 이용해 SQL 문장을 실행할 수 있음.
2. 카탈리스트 옵티마이저 (Catalyst Optimizer)
Spark SQL의 핵심 엔진으로, SQL 쿼리 혹은 DataFrame API 코드를 효과적으로 파싱하고 최적화하여 실행 플랜을 만듬.
논리 계획 → 논리 최적화 → 물리 계획 → 코드 생성(Codegen) 과정을 거쳐 최대한 효율적으로 실행함.
예를 들어 불필요한 컬럼 제거, 필터 푸시다운, 조인 순서 최적화 등을 수행하여 성능을 향상함.
Spark Streaming과 Structured Streaming
1. Spark Streaming (DStreams)
Spark 1.x 시절 도입된 마이크로 배치 기반 스트리밍 라이브러리임.
실시간 데이터를 짧은 배치 단위(예: 1초, 5초 등)로 수집하여, RDD 연산을 빠르게 반복함으로써 스트리밍을 처리함.
2. Structured Streaming
Spark 2.x 이후로 권장되는 새로운 스트리밍 엔진임.
DataFrame/Dataset API와 동일한 구조를 사용하여 스트리밍 데이터를 테이블처럼 처리할 수 있음.
트리거(trigger) 단위로 지속적으로 처리를 수행하며, 단순 마이크로 배치를 넘어선 “Continuous Processing” 모드도 가능함.
Exactly-once 처리(상황에 따라)와 같은 강력한 스트리밍 보장과 더불어, 배치/스트리밍 통합 API를 제공함.
MLLib, GraphX등 고급 라이브러리
Spark는 단순 배치나 SQL 쿼리 외에도 데이터 과학이나 그래프 분석 등 다양한 영역에 특화된 라이브러리를 제공함.
1. MLLib
머신러닝 알고리즘과 통계 함수를 지원하는 라이브러리.
회귀분석, 분류, 클러스터링, 추천 알고리즘, 피처 변환 등 다양한 알고리즘을 분산 환경에서 쉽게 활용할 수 있음.
Spark 2.x 이후에는 DataFrame 기반 API(ml 패키지)가 주로 사용됨.
2. GraphX
그래프 형태의 대규모 데이터를 분산 처리하기 위한 라이브러리.
정점(Vertex)과 간선(Edge)으로 구성된 그래프를 RDD 형태로 추상화하여, PageRank나 Connected Components 등의 그래프 알고리즘을 효율적으로 수행할 수 있음.
3. SparkR
R 언어 사용자를 위해 제공되는 라이브러리.
DataFrame 기반의 분산 처리와 머신러닝을 R 인터페이스에서 사용할 수 있음.
Spark의 최적화와 자원 활용
1. 메모리 사용 최적화
Spark는 대개 메모리 기반 처리로 빠른 성능을 제공하지만, 메모리가 부족하면 디스크를 사용해 스필(spill)할 수 있음.
Executor 메모리를 적절히 설정하고, 캐싱 전략(RDD Cache, DataFrame Cache) 등을 활용해 성능을 높일 수 있음.
2. 파티셔닝(partitioning) 전략
RDD나 DataFrame은 여러 파티션으로 분산되어 저장됨.
올바른 파티셔닝(예: shuffle 파티셔닝, coalesce, repartition 등)을 통해 데이터 이동(shuffle)을 최소화하고 성능을 개선할 수 있음.
3. 셔플(shuffle) 최적화
reduceByKey()나 join() 같은 연산은 셔플이 발생하여 비용이 크게 들 수 있음.
Spark 3.x부터는 Adaptive Query Execution(AQE)가 도입되어 런타임 중 셔플 파티션 수를 동적으로 조정하는 등 최적화가 자동화됨.
4. 클러스터 자원 설정
Spark-submit 시, --executor-memory, --executor-cores, --num-executors 등의 파라미터를 적절히 설정해야 함.
작업 유형(배치, 스트리밍, 머신러닝, SQL)에 따라 자원 배분이 달라질 수 있음.
실제 운영 환경에서의 Spark
1. 배포 모드
Standalone: Spark 자체의 Resource Manager를 사용하는 가장 단순한 구조.
YARN: Hadoop과 함께 사용하는 경우가 많으며, 기존 하둡 생태계와 잘 호환됨.
Mesos/Kubernetes: 대규모 컨테이너 오케스트레이션 환경에서의 운영을 지원.
2. 모니터링과 디버깅
Spark UI: DAG, 스테이지, 태스크 단위로 실행 상태, 메모리 사용량, 셔플 발생 등을 확인 가능.
로그 수집 및 모니터링 툴과 연동(예: ELK 스택, Grafana, Prometheus 등)하여 메트릭을 실시간 추적.
3. 보안과 멀티 유저
Kerberos, SSL/TLS, ACL 설정 등을 사용해 Spark 클러스터와 데이터 접근 권한을 제어할 수 있음.
Spark Thrift 서버 등을 사용하면 여러 사용자가 동시에 Spark SQL 작업을 수행할 수 있음.
4. 데이터 소스 연동
HDFS, Hive, Cassandra, HBase, JDBC, S3 등 다양한 데이터 소스/싱크 연동 지원.
Spark SQL을 통해 메타데이터 관리, 파케이(Parquet)나 ORC 같은 컬럼 포맷 활용 등으로 성능 향상.
정리
Apache Spark는 대규모 데이터 처리에 있어서 사실상 표준으로 자리매김했으며, 다음과 같은 장점을 통해 빅데이터 워크로드의 대부분을 커버할 수 있음.
1. 성능: 메모리 기반의 고속 처리, 강력한 최적화 엔진
2. 다양성: 배치, 스트리밍, 머신러닝, 그래프 분석을 단일 프레임워크에서 처리 가능
3. 유연성: Scala, Python, R, Java 등 여러 언어 지원, 다양한 클러스터 매니저와 연동
최신 버전에서는 AQE(Adaptive Query Execution), GPU 가속, Lakehouse 아키텍처(Delta Lake, Apache Iceberg 등과 결합) 등의 기능이 더해져, 빅데이터 처리 및 분석의 사실상 중심 축으로 더욱 자리 잡고 있음.
또한 Spark Connect 등 신규 프로젝트를 통해 Spark 클라이언트-서버 구조 개선 역시 빠르게 진행되고 있음.
결국 Apache Spark는 단순히 분산 배치 처리를 넘어, 통합 데이터 처리 엔진으로서 머신러닝 및 실시간 분석, 대화형 SQL 질의 등 다양한 시나리오에 적용 가능함.
대규모 분산 데이터 처리 환경을 설계, 개발, 운영해야 하는 전문가에게는 Spark의 내부 구조와 최적화 기법, 자원 관리 전략 등을 깊이 이해하는 것이 필수적임.
'Data Engineering > Spark' 카테고리의 다른 글
[Spark] Pyspark에서 repartition(), coalesce() 사용 (0) | 2025.03.29 |
---|---|
[Spark] Disk Spill (0) | 2025.03.28 |
[Spark] SparkSQL의 Window함수 종류 (1) | 2025.03.22 |
[Spark] Apache Spark 구조 (2) | 2025.03.15 |
[Spark] Apache Iceberg (2) | 2025.03.14 |