아파치 스파크

From CS Wiki

아파치 스파크(Apache Spark)는 분산 데이터 처리 프레임워크로, 대규모 데이터셋을 빠르고 효율적으로 처리할 수 있도록 설계되었다. 스파크는 빠른 계산 성능과 유연한 API를 제공하며, 다양한 데이터 처리 작업을 처리할 수 있다. 주로 클러스터 환경에서 실행되며, 메모리 내 연산을 통해 속도 향상을 이끌어낸다. 스파크는 Hadoop과 비교하여 훨씬 빠른 속도를 자랑하며, 대규모 데이터 처리 및 실시간 스트리밍 처리에 적합하다.

  • UC 버클리의 AMP 랩에서 개발하였으며, 현재 아파치 재단에서 관리
  • 공개 소프트웨어로, 창시자가 설립한 데이터브릭스에서 주로 개발

1 주요 특징[edit | edit source]

  • 속도: 메모리 내 연산을 기반으로 하기 때문에 디스크 기반 연산보다 빠른 속도를 제공한다.
  • 유연성: RDD, DataFrame, Dataset, MLlib, Spark Streaming 등 다양한 데이터 처리 방식을 제공한다.
  • 확장성: 수천 개의 노드를 지원하여 대규모 클러스터 환경에서 실행될 수 있다.
  • 간편한 API: Java, Scala, Python, R 등 여러 언어로 사용 가능한 API를 제공하여 다양한 환경에서 활용할 수 있다.

2 아파치 스파크 주요 모듈[edit | edit source]

스파크는 여러 구성 요소로 이루어져 있으며, 각 요소는 특정 작업에 최적화되어 있다. 주요 구성 요소는 다음과 같다.

2.1 Spark Core[edit | edit source]

Spark Core는 스파크의 기본 구성 요소로, 클러스터 관리, 스케줄링, 메모리 관리 및 데이터 배포 등을 담당한다. 이 핵심 구성 요소는 스파크 애플리케이션의 실행에 필요한 모든 기본적인 기능을 제공한다.

2.2 Spark SQL[edit | edit source]

Spark SQL은 관계형 데이터 처리와 쿼리를 지원하는 모듈로, SQL 쿼리, HiveQL, Parquet와 같은 데이터 파일 형식을 처리할 수 있다. 이 모듈을 통해 SQL 쿼리를 실행하여 RDD나 DataFrame으로 데이터를 변환할 수 있다.

2.3 Spark Streaming[edit | edit source]

Spark Streaming은 실시간 데이터 스트리밍 처리를 지원하는 모듈이다. 이 모듈은 실시간으로 데이터를 처리하고, 스트리밍 데이터를 RDD 형식으로 변환하여 처리할 수 있다. 또한, 배치 처리와 실시간 처리를 결합하여 사용할 수 있다. Spark Streaming은 실시간 애플리케이션을 구현할 때 유용하다.

2.4 MLlib[edit | edit source]

MLlib은 스파크에서 제공하는 기계 학습 라이브러리로, 분산 환경에서 다양한 기계 학습 알고리즘을 실행할 수 있다. 분산 환경에서 효율적으로 학습 모델을 훈련하고, 예측할 수 있는 기능을 제공한다. 이 모듈은 분산 환경에서 기계 학습을 수행할 수 있는 고성능 라이브러리이다.

2.5 GraphX[edit | edit source]

GraphX는 그래프 처리에 특화된 모듈로, 대규모 그래프 데이터를 처리하는 데 사용된다. 그래프 데이터 분석을 위한 다양한 알고리즘을 제공하며, 분산 환경에서 효율적으로 실행된다.

3 아파치 스파크 실행 모델[edit | edit source]

스파크는 RDD(Resilient Distributed Dataset)와 DataFrame이라는 두 가지 기본적인 데이터 모델을 사용하여 데이터를 처리한다.

3.1 RDD (Resilient Distributed Dataset)[edit | edit source]

RDD는 스파크의 핵심 데이터 구조로, 분산 환경에서 데이터를 처리할 때 사용된다. RDD는 데이터를 파티션으로 나누어 여러 노드에서 병렬로 처리하며, 결함 허용성과 분산 처리가 가능한 특성을 지닌다. RDD는 불변(immutable) 데이터를 다루며, 데이터셋에 대한 다양한 변환 연산(map, filter 등)을 지원한다.

3.2 DataFrame[edit | edit source]

DataFrame은 구조화된 데이터를 다루는 고수준의 데이터 모델로, SQL 쿼리를 사용하여 데이터를 처리할 수 있다. DataFrame은 RDD의 확장된 형태로, 스파크 SQL과 긴밀히 연동되어 다양한 데이터 소스와 연동할 수 있다. DataFrame은 SQL-like API를 제공하며, 내부적으로 Catalyst 최적화 엔진을 통해 성능을 개선한다.

4 스파크 클러스터의 구성 요소[edit | edit source]

스파크 클러스터는 여러 가지 중요한 구성 요소로 이루어져 있다. 각 구성 요소는 데이터 처리, 작업 실행 및 리소스 관리를 담당한다.

스파크 내부 동작 구조.png

4.1 드라이버(Driver)[edit | edit source]

드라이버는 스파크 애플리케이션의 주요 컨트롤러 역할을 한다. 애플리케이션의 실행 계획을 생성하고, 클러스터의 여러 워커 노드에게 작업을 할당한다. 또한, 애플리케이션 실행의 상태를 추적하고 결과를 반환한다.

4.2 워커(Worker)[edit | edit source]

워커 노드는 실제로 계산 작업을 수행하는 노드이다. 워커는 스파크 클러스터 내에서 실행되는 각 작업을 처리하고, 데이터를 파티셔닝하여 병렬로 작업을 수행한다.

4.3 실행자(Executor)[edit | edit source]

실행자는 워커 노드에서 실행되는 스파크 프로세스로, 실제 데이터 처리 및 연산을 담당한다. 각 실행자는 해당 파티션에서 데이터를 처리하고, 결과를 반환하는 역할을 한다.

4.4 클러스터 관리자(Cluster Manager)[edit | edit source]

클러스터 관리자는 스파크 클러스터의 리소스를 관리하고, 스파크 애플리케이션이 클러스터 내에서 실행될 수 있도록 리소스를 할당한다. 스파크는 여러 종류의 클러스터 관리자를 지원하며, 가장 일반적인 관리자는 YARN, Mesos, Kubernetes 등이 있다.

5 사용 사례[edit | edit source]

스파크는 다양한 데이터 처리 작업을 효율적으로 수행할 수 있다. 몇 가지 주요 사용 사례는 다음과 같다:

  • 배치 처리: 대규모 데이터를 일정 시간 간격으로 처리하는 작업에서 사용된다. 예를 들어, 데이터 웨어하우징, ETL(Extract, Transform, Load) 처리 등에 활용된다.
  • 실시간 스트리밍 처리: 실시간으로 데이터를 수집하고 처리하는 작업에서 사용된다. 예를 들어, 로그 분석, 소셜 미디어 분석, 센서 데이터 처리 등에 활용된다.
  • 기계 학습: MLlib을 사용하여 분산 환경에서 기계 학습 모델을 훈련하고 예측하는 데 사용된다. 예를 들어, 예측 모델링, 군집화, 분류 등의 작업에서 사용된다.
  • 그래프 처리: GraphX를 사용하여 대규모 그래프 데이터를 분석하는 작업에서 사용된다. 예를 들어, 소셜 네트워크 분석, 추천 시스템 등에 활용된다.

6 설치 및 실행[edit | edit source]

스파크는 여러 가지 방법으로 설치하고 실행할 수 있다. 가장 일반적인 방법은 Hadoop과 함께 클러스터 환경에서 실행하는 방법과, 로컬 환경에서 실행하는 방법이다.

  • 로컬 모드: 로컬 모드는 스파크를 단일 머신에서 실행하는 모드로, 개발 및 테스트에 적합하다.
  • 클러스터 모드: 클러스터 모드는 스파크를 여러 노드에서 실행하는 모드로, 대규모 데이터 처리에 적합하다. 클러스터 모드는 YARN, Mesos, Kubernetes 등의 클러스터 매니저를 사용하여 실행할 수 있다.

7 같이 보기[edit | edit source]

  • RDD (Resilient Distributed Dataset)
  • Spark SQL
  • Spark Streaming
  • MLlib
  • GraphX

8 참고 문헌[edit | edit source]

  • Zaharia, Matei, et al. "Spark: Cluster Computing with Working Sets." USENIX, 2010.
  • Chambers, Bill, and Zaharia, Matei. "Spark: The Definitive Guide." O'Reilly Media, 2018.