RDD
, DataFrame
, SQL 기반
의 데이터 처리 추상화스파크 주요 구성 요소
- Spark SQL (데이터 웨어하우징)
- Spark Streaming (실시간 데이터 분석)
- MLlib (머신 러닝)
- GraphX
스파크 아키텍쳐
- Executor가 작업
- Worker Node의 집합이 Cluster
- Cluster Manager가 부하를 확인해서 어느 쪽 노드로 보낼지 배분
- 이런 셋업 작업은 데이터 브릭스를 사용하면 할 필요 없고, 이미 구성된 구조를 사용하면 됨
RDD (Resilient Distributed Dataset)
- 직역하면, 회복력있는 분산된 데이터 집합
- 스파크의 기본 데이터 구조
- 여러 분산 노드에 걸쳐 저장되는 변경이 불가능한 데이터(객체)의 집함
- 각각의 RDD는 여러개의 파티션으로 분리 됨 (서로 다른 노드에서 분리되서 실행)
- 맵 리듀스는 각 맵-리듀스 단계마다 중간 결과를 재사용함으로 인해서 속도가 느려짐. 이를 보완
- RDD는 분산 데이터 세트를 위한 스파크의 데이터 추상화
- 사실은, RDD로 비즈니스 기반의 구조를 만들기는 쉽지 않아서 데이터 프레임이 더 사용됨
스파크의 데이터 프레임과 SQL
- RDD보다 Dataframe을 사용하는 것이 훨씬 데이터 처리 로직 구현이 편리함
- SQL을 사용하는 것이 Dataframe을 사용하는 것보다 조금 더 편리
SQL 대비 Dataframe의 장점
- 머신 러닝 학습 데이터 생성 등 다른 Spark Component들과의 Inferface 제공
- SQL에서 커버하지 못하는 데이터 처리 기능
- Loop 기반에서 보다 쉬운 데이터 처리
- 보다 쉬운 컬럼명 변경, 컬럼값 Update
- 사용자 정의 함수의 손쉬운 실행
여러 언어를 지원하는 Spark
- Scala, Java, Python, R, Spark SQL, Spark MLlib, Spark GraphX, Spark Streaming, Spark R 등