Skip to main content

Command Palette

Search for a command to run...

Spark 완벽 가이드 3장

Updated
2 min read

스파크의 기본 요소

  • 저수준 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를 사용하는 것을 권장한다)

More from this blog

오픈소스 기여모임 10기 후기 - 첫 Pr을 올리기까지

개발자라면 누구나 한 번쯤 오픈소스 기여에 대한 환상을 가져본 적 있을 거다. 하지만 막상 시작하려면 어디서부터 해야 할지 막막하고, 괜히 대단한 걸 해야 할 것 같은 부담감에 선뜻 시작하기는 어려운 것 같다. 나 또한 해보고 싶다는 마음만 가지고 계속 미뤄왔다. 그러다 2025년 말 쯤에 오픈채팅방과 글또 슬랙 채널에서 "오픈소스 기여모임" 10기 모집글을 봤다. 2년 넘게 500명 이상의 참가자와 함께 1000개 이상의 PR을 만들어온 커뮤...

Feb 5, 20265 min read

😢 글또 10기 활동 회고 — “글또야, 가지 마…”

들어가며 드디어 글또 10기 활동 회고를 정리해본다.6개월간의 여정을 뒤돌아보니 정말 많은 일들이 있었다. 글또라는 커뮤니티를 8기가 한창 진행되고 있을 때 알았는데 이름부터 인상이 강렬했다. "글쓰는 또라이가 세상을 바꾼다." 유쾌하고 독특한 문구에 피식 웃으며, '여긴 도대체 어떤 사람들이 모이는 곳이지?' 하고 넘겼었다. 재밌는 건 결국, 나도 그 "또라이들" 중 한 명이 되었다는 것이다. 😌 글또는 개발자들이 2주에 한 번 글을 ...

Jul 31, 20255 min read
😢 글또 10기 활동 회고 — “글또야, 가지 마…”

Serverless 환경에서 배포 전 환경변수 검증 자동화하기: TypeBox와 Bitbucket Pipeline 활용기

들어가며 배포 직후, 환경변수가 제대로 설정되지 않아 여러 API가 제대로 작동하지 않는 일이 있었습니다. 다행히 밤에 사용자가 없을 때 문제가 있었던 거라 영향도는 크지 않았지만 앞으로도 계속해서 발생할 수 있는 문제이기 때문에 해결해야 겠다고 생각했습니다. 개발 단계에서 문제가 발견되면 가장 좋겠지만, 현재 팀 상황에서는 백엔드 개발을 혼자 담당하고 있어 코드 리뷰나 검증 프로세스를 갖추기가 쉽지 않았습니다. 그래서 최소한 배포 전에 자동으...

Mar 16, 20254 min read

Cloudflare Tunnel로 포트포워딩 없이 홈서버 운영하기

이 글에서 다루는 내용 포트포워딩이 안 되는 이유 (CGNAT 환경 이해) CGNAT 우회 방법들의 장단점 비교 Cloudflare Tunnel 설정 방법 (MacOS 기준) 외부에서 내 PC로 접근할 수 있도록 허용하는 방법을 생각하면 포트포워딩이 가장 먼저 떠오릅니다. 공유기에서 특정 포트를 열어 외부에서 서버에 접속할 수 있도록 설정하는 방식으로, 마인크래프트 멀티를 해보셨던 분이라면 분명 해보셨을 방법입니다. 😊 작년에 저는 홈서...

Mar 2, 20256 min read
Cloudflare Tunnel로 포트포워딩 없이 홈서버 운영하기

구름고래 공방

48 posts