스파크(Spark)란?
스파크는 인메모리 기반의 대용량 데이터 고속 처리 엔진으로 범용 분산 클러스터 컴퓨팅 프레임워크이다.
*인메모리 컴퓨팅: 하드 디스크가 아닌 메인 메모리에 올려서 서비스를 하는 것
스파크 특징
- 인메모리 기반의 빠른 처리
스파크는 맵리듀스 작업처리에 비해 디스크는 10배, 메모리 작업은 100배 빠른 속도를 가지고 있다. 맵리듀스는 작업의 중간 결과를 디스크에 쓰기 때문에 작업 속도에 제약이 생기는 반면, 스파크는 메모리에 중간 결과를 메모리에 저장하여 반복 작업의 처리 효율이 높다.
- 다양한 컴포넌트 제공
스파크는 단일 시스템 내에서 스파크 스트리밍을 이용한 스트림 처리, 스파크 SQL을 이용한 SQL처리, MLib을 이용한 머신러닝 처리, GraphX를 이용한 그래프 프로세싱을 지원한다.
- 다양한 언어 지원
스파크는 자바, 스칼라, 파이썬, R 등 다양한 언어를 지원한다. 하지만 언어마다 처리하는 속도가 다르다. 성능이 제일 뛰어난것은 Scala이다.
- 다양한 클러스터 매니저 지원
클러스터 매니저로 YARN, Mesos, Kubernetes, standalone 등 다양한 포맷을 지원하여 운영 시스템 선택에 다양성을 제공한다. 또한 HDFS, 카산드라, HBase, S3등의 다양한 데이터 포맷을 지원하여 여러 시스템에 적용이 가능하다.
- 다양한 파일 포맷 지원 및 Hbase, Hive등과 연동 가능
스파크는 기본적으로 TXT, Json, ORC, Parquet등의 파일 포맷을 지원한다. S3, HDFS 등의 파일 시스템과 연동도 가능하고, HBase, Hive 와도 간단하게 연동할 수 있다.
컴포넌트 구성
스파크 코어
스파크 코어는 메인 컴포넌트로 작업 스케줄링, 메모리 관리, 장애 복구와 같은 기본적인 기능을 제공하고, RDD, Dataset, DataFrame을 이용한 스파크 연산을 처리한다.
스파크 라이브러리
- Spark SQL
스파크 SQL은 SQL을 이용하여 RDD, DataSet, DataFrame 작업을 생성하고 처리한다.
- Spark Streaming
스파크 스트리밍은 실시간 데이터 스트림을 처리하는 컴포넌트 입니다. 스트림 데이터를 작은 사이즈로 쪼개어 RDD 처럼 처리한다.
*RDD는 Resilient Distributed Dataset 의 줄임말로 스파크의 기본 데이터 구조이다. 분산 변경 불가능한 객체 모음이며 스파크의 모든 작업은 새로운 RDD를 만들거나 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현하고 있다.
- MLib
MLib는 스파크 기반의 머신러닝 기능을 제공하는 컴포넌트이다. 분류(classification), 회귀(regression), 클러스터링(clustering), 협업 필터링(collaborative filtering) 등의 머신러닝 알고리즘과 모델 평가 및 외부 데이터 불러오기 같은 기능도 지원한다.
- GraphX
GraphX는 분산형 그래프 프로세싱이 가능하게 해주는 컴포넌트이다. 각 간선이나 점에 임의의 속성을 추가한 지향성 그래프를 만들 수 있다.
클러스터 매니저
스파크 작업을 운영하는 클러스터 관리자이다. 스파크는 다양한 클러스터 매니저를 지원한다. 스파크에서 제공하는 스탠드얼론(Standalone) 관리자를 이용할 수도 있고, 메조스(Mesos), 얀(YARN), 큐버네티스(Kubernetes) 등의 관리자를 지원한다.