[Spark] 아파치 스파크 3.0이란?

Apache Spark란?

Aparche Spark 3.0의 구성

다양한 분산환경 위에서 애플리케이션 형태로 올라가서 돌아가는 분산 컴퓨팅 시스템

코어 엔진 위에 SQL, Streaming, Graph, ML 처리 기능등이 제공됩니다.

MapReduce vs. Spark

  • 낮은 생산성(맵리듀스) ↔️ 판다스 데이터 프레임 API SparkSQL을 통해 구조화된 데이터의 생산성을 높임 (스파크)
    • 2가지 오퍼레이션만 지원(배치 처리) ↔️ 다양한 방식의 컴퓨팅 지원(배치 데이터 처리, 스트림데이터 처리, SQL, 머신러닝, 그래프 분석)
    • 튜닝/ 최적화가 쉽지 않음(데이터 분포가 균등하지 않은 경우) ➡️ Data Skew는 Spark에서도 여전히 발생
  • 배치 작업 중심 (Low Latency가 아닌 Throughput에 초점)  
    • 데이터 모델과 오퍼레이션에 제약을 둠 
    • 하둡(Yarn)위에서만 동작 ↔️ 하둡(Yarn)외에 다양한 분산 컴퓨팅 환경 지원(K8s, Mesos)
    • 모든 입출력을 디스크를 통해 이뤄짐 ↔️ 기본적으로 메모리 기반으로 메모리가 부족하면 디스크 사용(데이터 처리가 빠름)

Spark 모듈

Spark 데이터 구조(프로그래밍 API)

- RDD (Resilient Distributed Dataset)
- DataFrame & Dataset 
  • RDD
    • 클러스터내 서버에 분산된 데이터를 지칭(변경 불가)
    • 구조화된 데이터, 비구조화된 데이터 모두 지원
    • 레코드별로 존재하지만 스키마가 존재하지 않음
    • 일반 파이썬 데이터는 parallelize함수로 RDD로 변환(반대로 파이썬(Spark 프로그램(드라이버))으로 변환은 collect)
    • 로우레벨 프로그래밍 API
      • 로우레벨의 함수형 변환 지원(map, filter, flatMap 등등)
  • DataFrame & Dataset 
    • 클러스터내 서버에 분산된 데이터를 지칭(변경 불가)
    • RDD위에 만들어지는 하이레벨 프로그래밍 API
    • 필드(컬럼)정보가 존재
      • 타입정보를 지정하거나 추측하게 할 수 있음
    • 컴파일/인터프린터 언어에 따라 파이썬(PySpark) 코딩인 경우 데이터프레임, 스칼라(Scala)나 자바(Java) 코딩은 Dataset을 사용
  • 테이블과 같은 구조화된 데이터나 Join, Aggregation을 위해서는 Spark SQL을 사용합니다. 

💡 Spark의 데이터 구조를 보면 변경 불가한 분산된 데이터기 때문에 파티션이 필요

 Spark SQL

  • 구조화된 데이터 처리를 SQL로 처리
  • 데이터프레임을 테이블 처럼 SQL로 처리 가능
  • 판다스도 동일 기능 제공

Spark ML

  • 머신러닝 관련 알고리즘, 유틸리티로 구성된 라이브러리
  • spark.mllib vs. spark.ml → spark.ml 사용! (spark.mllib는 더이상 지원x)
  • 원스톱 ML 프레임워크
    • 데이터 프레임과 SparkSQL 등으로 전처리
    • Spark ML을 통해 모델 빌딩
    • ML Pipeline을 통해 모델 빌딩 자동화
    • MLflow
  • 대용량 데이터 처리 가능 ↔︎ Sklearn과 같이 서버 한대 에서 돌아가는 파이썬 모듈과 비교