Spark 완벽 가이드 3장

스파크의 기본 요소

  • 저수준 API

    • RDD
  • 구조적 API

    • Dataset

    • Dataframe

  • @추가기능(표준 라이브러리)

스파크 라이브러리

  • 그래프 분석

  • 머신러닝

  • 스트리밍

spark-submit

  • 운영용 애플리케이션 실행

  • 예제로 제공되는 스칼라 애플리케이션 실행

      spark-submit \
          --class org.apache.spark.examples.SparkPi \
          --master local \
          C:\\Spark\\spark-2.4.7-bin-hadoop2.7\\examples\\jars\\spark-examples_2.11-2.4.7.jar
    

    실행한 모습

  • Configuration 우선순위

    1. code 내에서 정의한 설정

    2. spark-submit 에서 넣어주는 설정

    3. spark 폴더 내에 있는 설정파일에 적어둔 설정

  • --master 옵션을 조정해줌으로써 YARN이나 Kubernetes와 같은 클러스터 매니져에서 해당 애플리케이션을 수행할 수도 있다.

  • 사용가능한 값 목록

    • local

    • local[N] (로컬모드에서 N개의 코어로 실행)

    • local[*] (로컬모드에서 현재 머신이 가지고 있는 만큼의 코어로 실행한다.)

    • yarn

    • k8s://<api_server_url>

  • --deploy-mode 옵션

    • cluster 모드 : Driver 자체가 마스터에서 실행되고 마스터 내부에서 실행된다.

    • client 모드 : Driver는 submit을 호출한 노드에서 실행된다.

  • spark-submmit 공식 문서

Dataset

  • Java나 Scala에서 사용하는 정적 데이터 타입을 지원하기 위한 API이다.

  • 파이썬이나 R과 같은 동적 데이터 타입언어는 사용할 수 없다. (필요도 없다!)

  • Comany dataset 예시

      case class Compnay(
          name: String,
          country: String,
          members: Int
      )
    
  • Comany dataset 사용 에시

      val iSeq = Seq(Company("Kakao", "대한민국", "100"), 
                  Company("Naver", "대한민국", "100"), 
                  Company("Google", "미국", "100"))
      val df = ss.sparkContext.parallelize(iSeq).toDF()
    
      val ds = df.as[Company]
    

장점

  • 필요한 경우(DataFrame만으로 처리가 불가능할 때)에만 선택적으로 사용가능하다.

  • 스파크가 제공하는 함수들로 추가적인 처리가 가능하다. (고수준, 저수준 API 모두 적용가능)

  • collecttake 메소드 호출시에 Row타입 객체가 아닌 Dataset에 지정한 타입의 객체를 반환한다.

DataFrame

  • Row 타입의 객체로 구성된 분산 컬렉션

  • python 데이터 분석 패키지인 pandas의 DataFrame으로부터 spark의 DataFrame을 만들어낼 수도 있다. (관련 문서)

  • 기본 DataFrame은 Dataset[Row]를 가지고 생성됬다고 생각해도 무방하다.

Row 타입 객체

  • 다양한 데이터 타입의 테이블형 데이터를 보관 가능

구조적 스트리밍

  • 2.2버전 이상에서 사용 가능

  • 스트림 처리용 고수준 API

  • 일반 스트리밍

    • 적은 지연시간

장점

  • 구조적 API로 개발된 배치 모드의 연산을 스트리밍 방식으로 실행 가능

  • 계속해서 데이터가 쌓이는 상황에서 이벤트 시간에 따라 윈도우를 구성할 수 있다.

특징

  • 정적 데이터셋의 데이터를 분석해 DataFrame을 생성한다. (Dataset의 스키마도 함께 생성)

  • 스트리밍 연산 역시 지연 연산이므로 스트리밍 액션을 호출해야한다.

    • 스트리밍 액션은 다른 정적 액션들과는 다른 특성을 가진다.(추가해야할 부분)

저수준 API

  • 구조적 API와 다르게 세부적인 구현방식에서 차이가 보인다.

    • 파이썬과 스칼라에서 생성한 두 개의 RDD가 동일하지는 않다.
  • (구조적 API를 사용하는 것을 권장한다)