Apache Spark란?
아파치 스파크는 데이터 센터나 클라우드에서 대규모 분산 데이터 처리를 하기 위해 설계된 통합형 엔진임
Apache Spark의 핵심 특징 4가지
1. 속도
- 중간 연산을 위한 메모리 저장소를 지원하여 Hadoop Map-Reduce보다 빠름
- 또한, 질의 연산을 DAG(Directed Acyclic Graph)로 구성하고, DAG 스케쥴러 및 쿼리 최적화 모듈은 효율적인 연산 그래프를 만들고, 클러스터의 워커 노드에서 병렬 수행될 수 있게 함
- 물리엔진 텅스텐(Tungsten)은 whole-stage code generation 기법을 사용하여 실행을 위한 간결한 코드를 생성함
- 디스크 I/O의 제한적 사용
2. 사용 편리성
- 스파크는 데이터 프레임이나 데이터세트 같은 고수준 데이터 추상화 계층 아래 유연한 분산 데이터 세트 RDD(Resilent Distributed Dataset)이라는 자료구조 구축. 단순성 실현함
- 연산(Operation)의 종류로 트랜스포메이션(Transformation)과 액션(Action) 두 가지만 가지고 프로그래밍 할 수 있게 해서 단순성 실현
3. 모듈성
- 스파크 연산은 다양한 타입의 워크로드에 적용 가능하며, 지원하는 프로그래밍 언어(Scala, Python, Java, R)로 표현 가능
- 통합 라이브러리와 여러 컴포넌트들을 제공하고 이를 하나의 엔진 안에서 연동할 수 있음
4. 확장성
- 스파크는 저장보다는 빠른 병렬 연산 엔진에 초점이 맞추어져 있음. (이 점이 저장과 연산을 모두 포함하는 Apache Hadoop과의 차이) 이는 스파크가 수많은 데이터 소스에서 데이터를 읽고, 이를 메모리에서 처리 가능하다는 의미
그 외 특징
- 스파크는 JVM 위에서 동작. 즉 어떤 언어로 작성하든 실제 코드는 고도로 경량화된 바이트코드로 변환됨
- 스파크 SQL은 ANSI SQL 2003 표준과 호환.
- 데이터 과학을 위한 MLlib 존재
- 그래프를 조작하고 그래프 병렬 연산을 수행하게 해주는 GraphX 라이브러리 존재
아파치 스파크의 구성
- 하나의 스파크 애플리케이션은 하나의 드라이버 프로그램으로 구성. 이 드라이버는 Spark Driver임. Spark Driver는 Spark Session을 생성하고,이것이 스파크 클러스터의 분산 컴포넌트들에 접근함
스파크 드라이버(Spark Driver) :
- Spark Session 객체 초기화
- Cluser Manager와 통신하며 스파크 이그제큐터들을 위해 필요한 자원 요청
- 모든 스파크 작업을 DAG 연산 형태로 변환 및 스케줄링하여 각 실행 단위를 태스크로 나눔
- 나눈 태스크들을 스파크 이그제큐터에 분배
스파크 세션(Spark Session) :
- 모든 스파크 기능을 한 군데에서 접근할 수 있는 시작점 제공
클러스터 매니저(Cluser Manager) :
- 스파크 애플리케이션이 실행되는 클러스터에서 자원을 관리 및 할당하는 책임
현재 네 종류의 클러스터 매니저(standalne, hadoop YARN, Mesos, K8s) 지원
스파크 이규제큐터(Spark Executor) :
- 클러스터의 각 워커 노드에서 동작. 드라이버의 프로그램과 통신하며 워커에서 태스크를 실행하는 역할
(대부분 배포 모드에서 노드 당 하나의 이그제큐터만 실행)