본문 바로가기

데이터처리/spark

[spark definitive guide] 스파크 기능 둘러보기

이전 장에서는 구조적 API 와 관련된 핵심 개념을 봤다

스파크의 기능

 

기본 요소인 저수준 API 와 구조적 API 그리고 추가 기능을 제공하는 라이브러리로 구성되어있다.

 

스파크 라이브러리는 그래프 분석, 머신 러닝, 스트리밍 등 을 지원한다.

 

이번 장에서는 아직 다루지 않은 API 와 주요 라이브러리 그리고 스파크가 제공하는 다양한 기능을 봐보자

 

 

  • spark-submit
  • Dataset
  • 구조적 스트리밍
  • RDD

 

운영용 어플리케이션 실행하기

spark-submit 명령은 어플리케이션 코드를 클러스터에 전송해 실행시키는 역할을 한다.

클러스터에 제출된 어플리케이션은 작업이 종료되거나 에러가 발생할때까지 실행된다.

 

스파크 어플리케이션은 클러스터 매니저인 스탠드 얼론, YARN, 메소스등을 이용해 실행된다.

 

spark-submit 은 실행에 필요한 자원과 실행방식 그리고 다양한 옵션을 줄 수 있다.

 

스파크 디렉토리에서 다음 명령을 실행해보자

 

jar 파일과 className 을 지정해줬고 local 머신에서 실행되도록 설정한 모습이다.

 

저기서 master 옵션을 변경하면 스탠드얼론, Yarn, 메소스등 클러스터 매니저에서 실행 시킬 수 있다.

 

Dataset: 타입 안전성을 제공하는 구조적 API

Dataset 은 자바와 스칼라의 정적 데이터 타입 코드를 지원하기 위해 고안된 스파크 구조적 API다

Dataset 은 타입 안전성이 있어서 동적 타입 언어인 파이썬과 R에서는 쓸 수 없다.

 

DataFrame 은 다양한 데이터 타입의 테이블형 데이터를 보관할 수 있는 Row 타입의 객체로

구성된 분산 컬렉션이다.

 

Dataset 은 DataFrame의 레코드를 사용자가 정의한 클래스에 할당하고

자바의 ArrayList 등의 고정 타입형 컬렉션으로 다룰 수 있는 기능을 제공한다.

 

Dataset 은 타입 안정성을 지원한다

Dataset[Person] 은 Person 클래스 객체만 가질 수 있다.

 

데이터 타입을 정의하고 map 과 filter 함수를 사용할 수 있다.

저수준 API 를 사용할 수 있고 고수준 API 의 SQL 을 사용해 분석할수있다.

 

 

구조적 스트리밍

구조적 스트리밍은 스파크 2.2버전에서 안정화된 스트림 처리용 고수준 API 다.

구조적 API 로 개발된 배치 모드의 연산을 스트리밍 방식으로 실행 할 수 있으며,

지연 시간을 줄일 수 있다.

 

구조적 스트리밍은 스트리밍 처리를 수행해 값을 빠르게 얻을 수 있다는 장점이 있다.

 

 

먼저 DataFrame 으로 분석하는 방법을 보면

데이터를 읽고

 

show 로 콘솔에 보여주는 걸 볼 수 있다.

 

이제 스트리밍 방식을 봐보자

read 대신 readStream 메서드를 사용한다.

 

 

이전과 동일한 비즈니스 로직을 적용했다.

이 작업 역시 지연 연산이므로 데이터 플로우를 실행하기 위해 스트리밍 액션을 호출 해야한다.

스트리밍 액션은 어딘가에 데이터를 채워 넣어야 하므로 

일반적인 정적 액션과는 다른 특성을 가진다.

여기서는 인메모리에 저장하는 예제를 본다.

 

 

 

이렇게 스트리밍 형식으로 데이터를 처리 할 수 있다.

 

저수준 API

스파크는 RDD 를 통해 객체를 다루는데 필요한 다양한 기본 기능을 제공한다.

DataFrame 도 RDD 를 기반으로 만들어졌으며, 효율적인 분산 처리를 위해 저수준 명령으로 컴파일 된다.

대부분은 구조적 API 를 사용하는게 좋지만, RDD는 파티션 같은 물리적 실행 특성을 결정할 수 있어서

세밀한 제어를 할 수 있다.

 

시스템 메모리에 저장된 원시 데이터를 병렬처리 하는데 RDD를 사용 할 수 있다.

 

EX) spark.sparkContext.parallelized(Seq(1,2,3)).toDF()

 

 

스파크의 에코시스템과 패키지

커뮤니티가 만들은 패키지가 있다.

spark-packages.org 에서 자신이 개발한 패키지가 공개된 저장소를 볼 수 있다.