[Spark] 6. Spark Execution Plan

2024. 12. 3. 01:20·데이터/Spark

Spark 실행 계획

  • Apache Spark는 분산 데이터 처리 엔진으로, 쿼리를 최적화하고 실행하기 위해 여러 단계를 거침
  • 그렇기에 Spark에서 작업이 어떻게 실행되는지 이해하는 것은 성능 최적화에 매우 중요!!

Transformation vs. Action

Transform

  • 기존 데이터를 기반으로 새로운 데이터를 정의하는 연산
  • 지연 실행(Lazy Execution) 방식으로 동작 -> 실제 계산은 Action이 호출될 때까지 실행 X
    • 지연 실행을 통해 실행 계획 최적화 가능
  • 종류
    • Narrow Dependencies : 다른 파티션의 데이터를 필요로 하지 않고, 각 파티션에서 독립적으로 작업을 수행할 수 있는 연산
      • 예시
        • select
        • filter
        • map
    • Wide Dependnecies : 여러 파티션에서 데이터를 가져와야 하며, 데이터가 클러스터 내에서 *shuffle 되어야 하는 연산
      • 예시
        • groupBy
        • reduceBy
        • repartition
        • partitionBy
      • *shuffle : 데이터의 재분배 또는 재정렬

Actions

  • 실제 계산을 트리거하는 연산
  • Action 호출 시, 지금까지 정의한 모든 Transformations 실행 -> 실제로 데이터를 계산하고 결과 반환
  • 예시
    • collect
    • show
    • write
    • count

Transformation & Action 예시

spark.read.option("header", True).csv("test.csv").
where("gender <> 'F'").
select("name", "gender").
groupBy("gender").
count().
show()

  • 실행 흐름
    • Narrow Dependencies
      1. where("gender <> 'F'"): 각 파티션에서 데이터를 필터링하는 작업
      2. select("name", "gender"): 열을 선택하는 작업, 파티션 내에서 독립적으로 처리 가능
    • Wide Dependency
      1. groupBy("gender"): 데이터를 그룹화하는 작업은 파티션 간 데이터 이동이 필요하므로 shuffle이 발생
    • Action
      1. count(): 카운트 작업은 실제 계산을 시작하게 하는 Action
      2. show(): 결과를 화면에 출력하는 Action

Job, Stage, Task

  • Action이 호출되면, Spark는 Job을 생성하고 이를 여러 Stage로 나눔
  • 각 Stage는 여러 Task로 나뉘며, Task는 병렬로 실행됨

Job

  • Job은 Spark가 수행해야 하는 전체 작업
  • Action이 호출되면 Job이 트리거
  • Job은 하나 이상의 Stage로 나누어지며, 각 Stage는 데이터를 Shuffle할 때 새로운 Stage로 나누어짐

Stage

  • Stage는 병렬로 실행할 수 있는 작업의 집합
  • Stage는 Shuffle이 필요한 경우에만 생성
  • 각 Stage는 DAG 형태로 작업을 구성하며, Stage 간의 순차적인 실행 필요

Task

  • 가장 작은 실행 단위로, 파티션에 대해 실행됨
  • 병렬 실행이 가능하며, Executor에서 실행됨

실행 흐름

  1. Action이 호출됨 (예: show(), collect())
  2. Spark는 Job을 생성
  3. Job은 여러 Stage로 나눠짐
  4. 각 Stage는 Task로 나뉘며, 병렬로 실행.
  5. Spark는 DAG 형태로 Task를 실행하며, Shuffle이 필요할 경우 Stage 간 데이터 이동이 발생

Spark 실행 계획 최적화 기법

  • 캐싱 : 중간 결과를 메모리에 저장하여 중복 계산 방지
  • 브로드캐스팅 : 작은 데이터를 클러스터 모든 노드에 전파하여 shuffle을 줄임
  • 파티셔닝 : 적절한 파티셔닝 전략을 사용하여 데이터 분배 최적화
    • Repartition : shuffle을 발생시켜 모든 데이터 재분배
    • Coalesce : 줄어드는 파티션 수만큼 데이터를 합치기 때문에 shuffle을 최소화하며, 주로 파티션 수를 줄일 때 사용
  • 파이프라이닝: narrow transformation을 합쳐서 하나의 stage로 처리해 불필요한 Stage 수 감소
저작자표시 (새창열림)

'데이터 > Spark' 카테고리의 다른 글

[Spark] 8. Spark with AWS  (3) 2024.12.03
[Spark] 7. Partitioning & Bucketing  (0) 2024.12.03
[Spark] 5. File Format  (0) 2024.12.03
[Spark] 4. Database & Table  (2) 2024.12.03
[Spark] 3. Spark SQL  (1) 2024.12.02
'데이터/Spark' 카테고리의 다른 글
  • [Spark] 8. Spark with AWS
  • [Spark] 7. Partitioning & Bucketing
  • [Spark] 5. File Format
  • [Spark] 4. Database & Table
김줘
김줘
김줘와 같이 데이터, 컴퓨터, IT 공부
  • 김줘
    초보개발자 김줘의 코딩일기
    김줘
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 데이터 엔지니어링 데브코스
      • 데이터
        • Airflow
        • Spark
        • Kafka
        • dbt
      • TroubleShooting
      • Docker
      • AWS
      • 크롤링, 스크래핑, 시각화
        • Selenium
        • 시각화
      • 코딩테스트
        • 프로그래머스
        • 입출력과 사칙연산
        • 정렬
      • Django
      • 자바 공부
      • 끄적끄적
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터 엔지니어링 데브코스
    부트캠프
    TiL
    에어플로우
    티스토리챌린지
    데이터 엔지니어
    Python
    Azure
    Airflow
    초보개발자
    파이썬
    오블완
    데이터 엔지니어링 데브코스 4기
    프로그래머스
    자바
    데브코스
    프로그래밍
    aws
    Java
    cloud
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
김줘
[Spark] 6. Spark Execution Plan
상단으로

티스토리툴바