Repartition을 하는 이유

  • 전체적으로 파티션 수를 늘려 병렬성 증가
  • 매우 큰 파티션이나 Skew 파티션의 크기를 조절하려고
  • 파티션을 분석 패턴에 맞게 재분배 (Write once, read many)
    • 어떤 DataFrame을 특정 컬럼 기준으로 그룹핑을 하거나 필터링을 자주 하는 경우 (미리 그 컬럼 기준으로 지정해두었다면 그게 Bucketing)

Coalesce가 필요한 경우

  • 파티션의 수를 줄이는 용도 (늘리지 않음)
  • 셔플링이 발생하지 않고 로컬 파티션들을 머지함 (따라서 Skew 파티션을 만들어낼 수 있음)
  • Column이 사용되며 균등한 파티션 크기를 보장할 수 없음

Spark AQE (Adaptive Query Execution)

  • Dynamic query optimization that happens in the middle of query execution based on runtime statistics
  • Key points: 동적, 실시간 통계정보, 쿼리 중간에 바꿔준다

Dynamically coalescing shuffle partitions

  • 왜 필요한가? (적당한 파티션의 크기와 수는 성능에 지대한 영향을 미침)
    • 너무 많은 수의 작은 파티션
      • 스케줄러 오버헤드
      • 태스크 준비 오버헤드
      • 비효율적인 I/O (파일시스템/네트워크)
    • 적은 수 큰 파티션
      • GC 악몽 (OOM=Out Of Memory)
      • Disk Spill
    • spark.sql.shuffle.partitions라는 하나의 변수로는 불충분

0개의 댓글