정의
- 인메모리 기반의 대용량 데이터 고속 처리 엔진
- 범용 분산 클러스터 컴퓨팅 프레임워크
특징
- 인메모리 기반이기 때문에 빠른 처리가 가능하다
- MapReduce은 작업의 중간 결과를 디스크에 쓰기 때문에 IO로 인한 작업 속도에 제약이 생기지만, 스파크는 이러한 중간 결과를 메모리에 저장하기 때문에 반복 잡어에서 높은 처리 효율을 보인다.
- Java, Scala, Python, R, SQL과 같이 다양한 언어를 지원하여 사용의 편이성 제공
[출처] https://mindfulmachines.io/blog/2018/6/apache-spark-scala-vs-java-v-python-vs-r-vs-sql26
- SQL, Streaming, ML, 그래프 연산 등 다양한 컴포넌트 제공
- Spark Streaming을 이용한 스트림 처리
- Spark SQL을 이용한 SQL 처리
- MLib를 이용한 머신러닝 처리
- GraphX를 이용한 그래프 처리
- 추가적인 SW 설치 없이 다양한 애플리케이션 구현이 가능하며, 각 컴포넌트간의 연계를 이용해 애플리케이션의 생성도 쉽게 구현
- YARN, Mesos, Kubernetes등 다양한 클러스터에서 동작이 가능 / HDFS, HBase, Hive 등 다양한 파일 포맷 지원
- 기본적으로 txt, Json, ORC, Parquet 등의 파일 포맷 지원
- S3, HDFS, HBase, Hive 등과연동 가능
컴포넌트 구성
- 스파크 코어 + 스파크 라이브러리 + 클러스터 매니저
- 스파크 코어
- 메인 컴포넌트로 작업 스케줄링, 메모리 관리, 장애 복구와 같은 기본적인 기능 제공
- Resilient Distributed Dataset(RDD), Dataset, DataFrame을 이용한 스파크 연산 처리
- RDD : 스파크 컨텍스트 객체 이용
- Dataset, DataFrame : 스파크 세션 객체 이용
- 스파크 라이브러리
- Spark SQL
- SQL을 이용하여 RDD, DataSet, DataFrame 작업을 생성하고 처리
- Hive 메타스토어와 연결하여 하이브의 메타 정보를 이용하여 SQL 작업 처리
- Spark Streaming
- 실시간 데이터 스트림을 처리하는 컴포넌트, 스트림 데이터를 작은 사이즈로 쪼개어 RDD 처럼 처리
- MLib
- Classification, Regression, Clustering, Collaborative Filtering 등 ML 알고리즘과 모델 평가 및 외부 데이터 불러오기 같은 기능 지원
- GraphX
- 분산형 그래프 프로세싱 지원. 각 간선이나 점에 임의의 속성을 추가한 지향성 그래프 생성 가능
- 클러스터 매니저
- Standalone 관리자 및 Mesos, YARN, Kubernetes 등의 관리자를 지원