Chapter4 구조적 API

구조적 API에는 3가지 분산 컬렉션이 존재한다.

DataSet
DataFrame
SQL 테이블과 뷰

배치와 스트리밍처리에서 구조적 API를 사용할 수 있으며, 구조적 API를 활용해 배치 작업을 스트리밍 작업으로 변환할 수 있다.

DataFrame과 Dataset

DataFrame과 Dataset의 정의는 잘 정의된 로우와 컬럼을 가지고 있는 분산 테이블 형태의 컬렉션이다. 결과를 생성하기 위해 어떤 데이터에 어떤 연산을 적용해야 하는지 정의하는 지연 연산의 실행계획이며, 불변성을 가진다.

스키마(Schema)

스키마는 DataFrame의 컬럼명과 데이터 타입을 정의한 것을 말한다. 데이터 소스에서 얻거나 직접 정의할 수 있으며, 여러 데이터 타입으로 구성되므로 어떤 데이터 타입이 어느 위치에 존재하는지 정의하는 방법이 필요하다.

스파크 구조적 데이터 타입 개요

스파크는 실행 계획 수립과 처리에 사용하는 자체 데이터 타입 정보를 가지고 있는 카탈리스트 엔진을 사용하는 사실상의 프로그래밍 언어이다. 카탈리스트 엔진은 다양한 최적화 기능을 제공한다. 파이썬이나 R을 활용해 구조적 API를 활용하여도 각 언어의 데이터 타입을 스파크의 데이터 타입에 매핑시켜 사용한다.

DataFrame과 DataSet의 비교

DataFrameDataset
데이터 타입 존재 여부비타입형타입형
데이터 타입 일치 여부 확인 시점런타임컴파일 타임
특징Row타입으로 구성된 Dataset. Row 타입을 황용하기에 효율적 연산이 가능JVM기반 언어인 자바와 스칼라에서만 지원

구조적 API의 실행 과정

구조적 API 실행을 위한 절차는 아래와 같다.

  1. DataFrame/Dataset/SQL을 이용해 코드 작성
  2. 코드에 문제가 없다면 스파크가 논리적 실행 계획으로 변환
  3. 스파크는 논리적 실행 계획을 물리적 실행계획으로 변환하고, 그 과정에서 최적화 확인
  4. 클러스터에서 물리적 실행 계획 처리

논리적 실행 계획 단계에서는 추상적 트랜스포메이션만 표현한다. 사용자의 코드를 최적화된 버전으로 변환하여 1차적 논리적 실행계획을 세우고 카탈로그를 통해 컬럼과 테이블을 검증한다. 카탈로그를 통해 검증된 논리적 실행계획은 카탈리스트 옵티마이저에서 논리적 최적화를 거쳐 최종 논리적 실행계획으로 완성된다.

물리적 실행계획은 스파크 실행 계획이라고도 불리며, 실제 클러스터 환경에서 실행하는 방법을 정의하게 된다. 다양한 물리 실행 계획 중 여러가지 비용모델을 고려하여 최적의 전략을 선택한다.

최적의 물리적 실행 계획이 선택되면 저수준 프로그래밍 인터페이스인 RDD를 대상으로 모든 코드를 처리한다. 런타임 도중 자바 바이트 코드를 생성해 전체 task나 stage를 제거하여 추가적인 최적화도 수행하게 된다.

Reference

스파크 완벽 가이드
아파치 스파크

profile
개발자 지망생입니다.

0개의 댓글