Spark란?
대규모 데이터 분석을 위한 통합 엔진입니다.
빠르고 범용적인 인메모리 기반 클러스터 컴퓨팅 엔진입니다.
분산 메모리 기반의 빠른 분산 병렬 처리가 가능합니다.
배치, 스트림 대화형 쿼리, 머신러닝 등을 지원합니다.
scala, java, python, R 기반의 api 제공합니다.
주요 특징
1. 배치/스트림 처리
배치 처리와 스트림 처리 모두 가능합니다.
2. sql 기반 분석 지원
애드훅 분석과 대시보드 등을 만들 수 있습니다.
3. 큰 규모의 데이터 사이언스
다운 샘플링을 할 필요없이 페타 사이즈의 EDA를 가능하게 해줍니다.
4. 머신러닝
다양한 머신러닝 알고리즘 지원합니다.
Spark 구성 요소
1. Spark Core API
다양한 언어를 api 기반으로 지원합니다.
2. spark sql
대화형 쿼리로 데이터를 분석합니다.
dataframe을 통해 분산 sql쿼리로 동작하여 구조화된 데이터를 처리합니다.
3. Streaming
다양한 소스의 실시간 데이터를 처리할 수 있습니다.
4. MLlib
머신러닝 라이브러리을 지원합니다.
5. GraphX
그래프 처리를 위한 다양한 라이브러리 지원합니다.
Spark 아키텍처
Spark 애플리케이션을 클러스터 매니저에게 제출하면 여러 익스큐터들이 클러스터의 워커노드상의 동작하면서 분산 처리를 수행하는 구조입니다.
애플리케이션의 실행이 완료되면 클러스터 매니저(Cluster Manager)가 익스큐터(Executor)를 종료시키고 Driver가 성공이나 실패 상태가 되면서 종료됩니다.
1. Driver Program
사용자는 Driver Program을 작성하고 Spark Context를 생성합니다.
Driver에서는 애플리케이션의 정보를 유지 관리하고 익스큐터의 작업을 분석하고 스케줄링 및 최적화를 수행합니다.
2. Spark Context
Spark에서 주요한 진입점이며, 클러스터와의 연결을 나타내는 객체입니다.
Spark에 사용할 변수 설정, 환경 설정, 리소스 설정 등을 할 수 있습니다.
3. Cluster Manager
클러스터매니저는 클러스터의 리소스의 관리와 작업 스케줄링을 담당하는 역할을 합니다.
익스큐터를 실행시키게 되면 관련 정보를 Driver에 전송합니다.
클러스터 매니저는 Standalone, YARN, Mesos, Kubernetes가 있습니다.
4. Worker Node
Driver에게 할당받은 task를 실행시키면 task 상태와 성공여부를 Driver에 전송하는 역할 수행합니다.
5. Executor
할당받은 리소스를 활용하여 task를 수행하고 다른 익스큐터와 병렬로 수행합니다.
데이터를 이동시키거나 Driver와 통신하는 역할을 합니다.