[Spark] 7. Partitioning & Bucketing

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

Partitioning & Bucketing

  • Spark와 같은 분산 데이터 처리 시스템에서 데이터를 분할하는 개념
  • 데이터의 분산 저장 및 쿼리 성능 최적화에서 중요한 역할

Partitioning

  • 데이터를 물리적으로 여러 파티션에 나누어 저장하는 방식
  • Spark에서 파티션은 데이터가 클러스터의 여러 노드에 분산되어 처리되는 기본 단위
  • 일반적으로 연산 최적화와 병렬 처리를 위해 사용됨
  • 특징
    • 파티셔닝 기준 : 데이터를 특정 컬럼을 기준으로 나눔 -> 적절한 cardinality를 갖는 컬럼
    • 자동 또는 수동 설정
      • repartition()이나 coalesce()같은 함수를 통해 파티션 수를 설정하거나 변경 가능
      • 데이터를 특정 컬럼에 맞게 파티셔닝 하려면 partitionBy()를 사용
    • 사용 목적
      • 데이터가 커질 때 병렬 처리 성능을 개선하기 위해 사용
      • 동일한 파티션 내에서 작업을 병렬로 처리하면 더 빠른 속도로 데이터 처리 가능
  • 예시
# 데이터를 'year' 컬럼을 기준으로 파티셔닝
df.write.partitionBy("year").parquet("/path/to/output")
  • 장점
    • 병렬 처리 성능 향상 : 동일한 파티션 내에서 데이터를 병렬로 처리할 수 있어 성능 향상
    • 효율적인 데이터 접근
      • 파티션을 기준으로 쿼리 최적화 가능
      • 특정 파티션만 읽으면 되기에, 데이터 접근 속도 향상
  • 단점
    • 파티션의 수에 따라 성능 변동
      • 파티션 수가 너무 많거나 적으면 작업 성능 저하
      • 적절한 파티션 수 설정이 중요

Bucketing

출처 : Clairvoyant Blog

  • 데이터를 특정 컬럼의 해시 값을 기준으로 나누는 방식
  • 일반적으로, 쿼리 성능을 최적화하는 데 사용
  • 특징
    • 해시 기반 분할 : 데이터를 나누는 기준이 특정 컬럼 값이 아니라 해당 값의 해시 값
    • 정적 파티셔닝 : 데이터를 나누는 과정에서 동적 재배치 없이 고정된 수의 버킷 설정
    • 사용 목적 : 주로 조인 최적화나 분산 쿼리 성능을 높이는 데 사용
  • 예시
# 데이터를 'user_id'를 기준으로 10개의 버킷으로 나누어 저장
df.write.bucketBy(10, "user_id").sortBy("user_id").saveAsTable("bucketed_table")
  • 장점
    • 효율적인 조인 처리 : 두 테이블을 같은 방식으로 버킷팅하면, 조인할 때 Shuffle 최소화 가능 -> 조인 성능 향상 가능
    • 빠른 쿼리 : 특정 컬럼을 기준으로 데이터를 분할하여 저장하고, 그 컬럼에 대해 쿼리 성능이 향상됨
  • 단점
    • 정적 분할
      • 버킷 수 고정
      • 데이터 분포가 불균형할 수 있음
    • 성능 문제 : 버킷 수를 잘못 설정하면, 성능에 영향 발생
저작자표시 (새창열림)

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

[Spark] 8. Spark with AWS  (3) 2024.12.03
[Spark] 6. Spark Execution Plan  (1) 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] 6. Spark Execution Plan
  • [Spark] 5. File Format
  • [Spark] 4. Database & Table
김줘
김줘
김줘와 같이 데이터, 컴퓨터, IT 공부
  • 김줘
    초보개발자 김줘의 코딩일기
    김줘
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 데이터 엔지니어링 데브코스
      • 데이터
        • Airflow
        • Spark
        • Kafka
        • dbt
      • TroubleShooting
      • Docker
      • AWS
      • 크롤링, 스크래핑, 시각화
        • Selenium
        • 시각화
      • 코딩테스트
        • 프로그래머스
        • 입출력과 사칙연산
        • 정렬
      • Django
      • 자바 공부
      • 끄적끄적
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
김줘
[Spark] 7. Partitioning & Bucketing
상단으로

티스토리툴바