구조적 API는 데이터 흐름을 정의하는 기본 추상화 개념
다양한 유형의 데이터를 처리 할 수 있다.
- 비정형적인 로그 파일
- 반 정형적인 CSV 파일
- 정형적인 파케이 파일
구조적 API 의 종류
- Dataset
- DataFrame
- SQL 테이블과 뷰
DataFrame 과 Dateset
DataFrame 과 Dataset 은 잘 정의된 로우와 컬럼을 가지는 분산 테이블 형태의 컬렉션이다
지연 연산의 실행 계획이며, 불변성을 가진다.
DataFrame에 액션을 호출하면 스파크는 트랜스포메이션을 실행하고 결과를 반환한다.
DataFrame 은 '비타입형' 이고 Dataset 은 '타입형' 이다.
정확히는 DataFrame 은 타입 일치 여부를 런타임 이 되어서야 확인 할 수 있다.
Dataset 은 컴파일 단계에서 확인 할 수 있다.
Dataset 은 JVM 기반의 스칼라와 자바만 허용해준다.
DataFrame 을 사용하면 스파크의 최적화된 내부 포멧을 사용할 수 있다.
컴파일 단계에서 엄격한 검증이 필요한 경우엔 Dataset을 사용하자.
스키마
스키마는 분산 컬렉션에 저장할 데이터 타입을 정의하는 방법
DataFrame 의 컬럼명과 데이터 타입을 정의한다.
구조적 API 의 실행 과정
스파크가 클러스터에서 실제 처리되는 과정을 알아보자
구조적 API 쿼리가 사용자 코드에서 실제 실행 코드로 변환되는 과정을 알아보자
1. DatraFrame, Dataset, SQL 로 코드를 작성한다.
2. 스파크가 논리적 실행 계획으로 변환
3. 스파크는 논리적 실행 계획을 물리적 실행 계획으로 변환, 이 과정에서 최적화 할 수 있는지 확인
4. 스파크는 클러스터에서 물리적 실행 계획(RDD 처리)을 실행한다.
작성한 스파크 코느는 콘솔이나 spark-submit 을 통해 실행한다.
카탈리스트 엔진의 옵티마이저는 코드를 받고 실행 계획을 생성한다.
스파크는 코드를 받고 실행한 후 결과를 반환한다.
- 논리적 실행 계획
사용자 코드를 논리적 실행계획으로 변환한다.
논리적 실행 계획 단계에서는 추상적 트랜스포메이션만 표현한다.
이 단계에서는 드라이버나 익스큐터의 정보를 고려하지 않는다.
사용자의 코드를 다양한 최적화 버전으로 변환한다.
이 과정으로 첫번째 검증 전 논리적 실행 계획 으로 변환한다.
코드의 유효성과 테이블이나 컬럼의 존재 여부만 판단 하는 과정으로 실행 계획을 검증하지 않은 상태다.
스파크 분석기는 컬럼과 테이블을 검증하기 위해
카탈로그를 활용한다.
카탈로그에서 검증을 한 후 검증된 논리적 실행 계획이 나온다.
테이블과 컬럼에 대한 카탈로그의 검증 결과는 카탈리스트 옵티마이저로 전달한다.
옵티마이저는 논리적 실행 계획을 최적화시켜
최적화된 논리적 실행 계획을 만들어 낸다.
- 물리적 실행 계획
물리적 실행계획은 스파크 실행 계획이라고도 불린다.
논리적 실행 계획을 클러스터 환경에서 실행하는 방법을 정의한다.
논리적 실행계획을 다양한 물리적 실행 전략을 생성하고
비용모델을 이용해 비교 한 후
최적의 물리적 실행 계획을 선택한다.
비용모델은 예를 들면 테이블의 크기나 파티션 수 등의 물리적 속성을 고려해
지정된 조인 연산 수행에 필요한 비용을 계산 하고 비교하는 행동을 한다.
물리적 실행 계획은 RDD 와 트랜스포메이션으로 변환 된다.
스파크는 DataFrame, Dataset, SQL 로 정의된 쿼리를 RDD 트랜스포메이션으로 컴파일 한다.
'데이터처리 > spark' 카테고리의 다른 글
데이터 소스 (0) | 2021.05.14 |
---|---|
구조적 API 기본 연산 (0) | 2021.05.12 |
[spark definitive guide] 스파크 기능 둘러보기 (0) | 2021.02.03 |
[spark definitive guide] - 스파크 간단히 살펴보기 (0) | 2021.02.02 |
[Spark definitive guide] - 아파치 스파크란 (0) | 2021.02.02 |