1. 스파크 분산시스템 아키텍처
2. spark 의 2가지 주요 개념
- RDD
- DAG
3. 하둡 맵-리듀스 단점 & 스파크 장점
4. 스파크 API
- RDD
- Spark SQL 과 DataFrame
스파크 분산시스템 아키텍처
Spark Application 은 Spark Context object 에 의해 클러스터에서 독립적인 프로세스들의 집합으로 실행이 됩니다. 클러스터에서 실행되기 위해, Spark Context 는 다양한 타입의 클러스터 매니저와 연결될 수 있다.
Spark Context 는 어플리케이션의 데이터를 저장하고 계산을 수행하는 프로세스들을 처리하는 노드들의 Executors 와 연결된 후, Executors 에 Application Code (Task) 를 전송하여 실행시킨다.
- Application: Spark 에 구축된 사용자 프로그램. Driver Program과 Executor 로 구성
- Application Jar: 런타임에 Hadoop 또는 Spark 라이브러리가 추가됨
- Driver Program: Application의 main()함수를 실행하고, Spark Context를 생성하는 프로세스
- Cluster Manager: 클러스터에서 리소스를 확보하기 위한 외부 서비스
- Deploy mode: 드라이버 프로세스가 실행되는 위치 구별
→ “클러스터 모드”에서 클러스터 내부에서 드라이버 시작
→ “클라이언트 모드”에서 클러스터 외부에서 드라이버 시작 - Worker node: 애플리케이션 코드를 실행할 수 있는 모든 노드
- Executor: 작업을 실행하고 작업을 통해 메모리 또는 디스크 저장소에 데이터를 유지. Worker Node 에 의해 실행하고, 각 Application 에 존재.
- Task: 한 Executor 에게 보내지는 일의 단위
- Job: Spark 작업에 의해 생성되는 여러 작업으로 구성된 병렬 계산
- Stage: 각 Job이 서로 의존성이 있는 ‘Stage’로 나누어짐
스파크 2가지 주요 개념
1. RDD (Resilient Distributed Datasets)
- Resilient : 분산되어 있는 데이터에 에러가 생겨도 복구할 수 있는 능력
- Distributed : 클러스터의 여러 노드에 데이터를 분산해서 저장
- Dataset : 분산된 데이터 모음
RDD 연산
- Transformation: input => output (새로운 데이터셋)
ex. map, filter - Action: 데이터셋에 대한 계산
ex. reduce, count
Plan
참고 블로그 링크
- logical plan: Logical plan은 수행해야하는 모든 transformation 단계에 대한 추상화. 드라이버(Master node)와 Executer(Worker node)에 대해서는 다루지 않는다.
- physical plan: Logical plan이 어떻게 클러스터 위에서 실행될지에 관한 것
2. DAG (Directed Acyclic Graph)
DAG 엔진을 통해 맵 리듀스의 느린 부분 (multi-pass map reduce, multi-stage execution model) 을 제거해 성능 향상
하둡 맵-리듀스 단점
- 구현의 복잡성: 하둡 라이브러리의 객체를 상속 받아 메소드를 오버라이딩하고, 최종적으로 구현된 클래스를 모아 jar 형태로 만들어 배치 형태로 하둡에 제출
- ad-hoc 데이터 분석이나 streaming 데이터 분석에 적합하지 않음
스파크 강점
- 분산 인메모리 프로세싱 엔진
→ 하둡을 지원하는 인메모리 프로세싱으로 속도가 빠르다.
→ Disk I/O가 많이 일어나는 하둡의 맵-리듀스보다 특정 작업에서는 더 빠르게 수행됨. 스파크는 HDFS 에 저장된 데이터를 하둡 코어 라이브러리를 호출함으로써 메모리로 불러온 후, 변환 및 계산 등을 메모리에서 수행. - 유저 친화적인 API
→ 여러가지 분산 데이터베이스나 파일 시스템 수용
→ Scala, Python, R 과 같이 다양한 언어의 API 지원
스파크 API
참고: Naver D2 LearningSpark
참고: “하둡을 제압한 빅데이터 플랫폼” 아파치 스파크란 무엇인가
참고: Spark API 블로그
저수준 API: RDD
RDD: 분산되어 존재하는 데이터 요소들의 모임 → 변경 불가능
→ Transformation, Action 2가지 타입의 연산을 지원
→ RDD를 lazy evaluation 으로 액션을 사용하는 시점에 처리
구조적 API: Spark SQL 과 DataFrame
Spark SQL은 구조화돈 데이터(스키마를 가진 데이터)에 대해 데이터 불러오기 및 쿼리등을 통해 쉽게 다룰 수 있다.
- DataFrame: RDD의 확장 모델. Row 객체들의 RDD. 스키마 정보를 가지고 있다. DataFrame 추상화 클래스를 통해 구조화된 데이터 셋을 다루는 작업을 간편하게 만든다.
→ DataFrame 은 관계형 DB 테이블과 유사한 개념 - 다양한 구조적 포맷의 데이터를 읽고 쓸 수 있다.
- JDBC/ODBC 연결을 지원하므로 Spark SQL 을 통해 SQL 로 데이터를 질의할 수 있다.