Spark 3. 구조적 API

skh951225·2023년 10월 7일
0

Spark

목록 보기
3/4

4. 구조적 API 개요

  • 구조적 API는 데이터 흐름을 정의하는 기본 추상화 개념
  • 구조적 API는 비정형 로그파일, 반정형 CSV, 정형 Parquet파일까지 다양한 유형의 데이터를 처리할 수 있음
  • 구조적 API는 Dataset, DataFrame, SQL 테이블과 뷰와 같은 세가지 분산 컬렉션 API가 있다.
  • 배치와 스트리밍 처리에서 구조적 API를 사용할 수 있음
  • 구조적 API를 활용하면 배치 작업을 스트리밍 작업으로 변환할 수 있음(반대도 마찬가지)

스파크의 기본개념

  • 스파크는 트랜스 포메이션의 처리 과정을 정의하는 분산 프로그래밍 모델이다.
  • 다수의 트랜스포메이션은 DAG로 표현되는 명령을 만들어냄
  • 액션은 잡을 실행하기위해 스테이지와 테스크로 나누고 DAG처리 프로세스를 실행

DataFrame과 Dataset

  • 열과 행으로 이루어진 분산 테이블 형태의 컬렉션
    • 행은 정수형이나 문자열과 같은 단순 데이터 타입, 배열이나 맵 같은 복합 데이터 타입, null값으로 표현됨
    • 열은 데이터 레코드이며 SQL, RDD, 데이터소스에서 얻거나 직접 만들수 있다.
  • 각 컬럼은 동일한 수의 열을 가져야하며 컬렉션의 모든 로우는 동일한 데이터 타입 정보를 가져야함
  • DF와 Dataset은 지연 연산의 실행계획이며 불변성을 가진다.
  • 액션을 호출하면 트랜스포메이션은 실제로 실행되고 결과를 반환
  • 스키마는 분산 컬렉션을 저장할 데이터 타입을 정의하는 방법
  • 스카마는 컬럼명과 데이터 타입을 정의하며 데이터 소스에서 얻거나(schema-on-read) 직접정의할 수 있음

스파크의 구조적 데이터 타입

  • 스파크는 실행 계획 수립과 처리에 사용하는 자체 데이터 타입 정보를 가지고 있는 Catalyst 엔진을 사용한다.
  • Catalyst 엔진은 다양한 실행 최적화 기능을 제공한다.
    • 조건절 푸시 다운이나 선택절 구문을 이용해 논리적 실행 계획을 최적화하는 규칙의 모음
    • 필요한 경우 도메인에 최적화된 규칙을 적용할 수 있는 카탈리스트 옵티마이저의 확장형 패키지를 만들 수도 있음
  • 스파크는 자체 데이터 타입을 지원하는 여러 언어 API와 직접 매핑되며, 각 언어에 대한 매핑 테이블을 가지고 있다.
  • 즉, 파이썬이나 R을 이용해 스파크의 구조적 API를 이용하더라도 Catalyst 엔진에 의해 스파크의 데이터타입으로 변환되어 연산이 수행된다.

DataFrame과 Dataset의 비교

  • DF(비타입형) - Dataset(타입형)
    • DF는 스키마에 명시된 데이터 타입의 일치여부를 런타임에 확인한다.
    • Dataset은 데이터 타입의 일치 여부를 컴파일 타임에 확인한다.
  • 언어
    • Dataset은 JVM 기반의 언어인 스칼라, 자바에서만 지원한다,
    • Dataset의 데이터 타입을 정의하려면 Scala(case class)나 Java(JavaBean)을 사용해야함
  • DataFrame은 Dataset의 한 종류이다.
    • DF는 Row타입으로 구성된 Dataset이다.
    • Row 타입은 연산에 최적화된 인메모리 포맷의 내부적인 표현 방식
    • Row 타입을 사용하면 가비지 컬렉션과 객체 초기화 부하가 있는 JVM 데이터 타입을 사용하는 대신 자체 데이터 포맷을 사용하기 때문에 매우 효율적인 연산이 가능
  • 중요한 점은 DataFrame을 사용하면 스파크의 최적화된 내부 포맷을 사용할 수 있다는 점

구조적 API의 실행과정

전체적인 과정

  1. DataFrame/Dataset/SQL을 이용해 코드를 작성
  2. 유효한 코드라면 논리적 실행계획으로 변환
  3. 논리적 실행계획을 물리적 실행계획으로 변환, 그 과정속에서 최적화를 할 수 있는지 확인
  4. 스파크 클러스터에서 물리적 실행계획(RDD 처리)은 실행

논리적 실행 계획

  • 추상적인 트랜스포메이션만 표현
  • 드라이버나 익스큐터의 정보를 고려하지 않음
  1. 코드의 유효성과 테이블이나 컬럼의 존재 여부를 판단하여 unresolved logic plan으로 변환
  2. 스파크 analyzer는 컬럼과 테이벌을 검증하기 위해 카탈로그, 모든 테이블의 저장소 그리고 DF 정보를 활용해 resolved logic plan으로 변환
  3. resolved logic plan은 카탈리스트 옵티마이저에게 전달되어 최적화된 논리적 실행계획을 생성

물리적 실행 계획

  • 논리적 실행계획을 클러스터에서 실행하는 방법을 정의한 것이다.
  1. 최적화된 논리적 실행 계획을 통해 다양한 물리적 실행 전략을 생성
  2. 비용 모델을 이용해서 비교후 최적의 전략을 선택
  3. DataFrame, Dataset, SQL로 정의된 물리적 실행 계획을 RDD 트랜스포메이션으로 컴파일 (스파크를 컴파일러라고 부르기도함)
  4. 스파크는 런타임에 task나 stage를 제거할 수 있는 자바 바이트 코드를 생성해 추가적은 최적화를 수행하고 처리결과를 사용자에게 반환

parquet : https://devidea.tistory.com/92

0개의 댓글