20

Shuffle: 성능의 가장 큰 적

Spark 성능 튜닝: Shuffle과 Skew 정복

학습 목표

Shuffle이 발생하는 원인을 이해한다 Shuffle의 비용을 파악한다 Shuffle을 줄이는 기본 전략을 안다

Shuffle: 왜 비싼가?

Shuffle = 데이터를 네트워크로 재분배

에디터 로딩 중...

Shuffle이 비싼 이유

  1. 디스크 I/O: Map 결과를 디스크에 씀
  2. 네트워크 I/O: 다른 노드로 전송
  3. 정렬: 키 기준으로 정렬
  4. 직렬화/역직렬화: 데이터 변환

경험칙: Shuffle이 전체 시간의 80%를 차지하기도 함


Shuffle을 일으키는 연산들

연산Shuffle?이유
filter, mapX파티션 내 처리
groupBy + aggO같은 키를 모아야 함
joinO같은 키를 매칭해야 함
orderBy (전역)O전체 정렬
distinctO중복 제거
repartitionO파티션 재구성
coalesce줄이기만 하면 X

Shuffle 줄이는 기본 전략

1. 미리 필터링

에디터 로딩 중...

2. Broadcast Join (작은 테이블)

에디터 로딩 중...

조건: 작은 테이블이 메모리에 들어가야 함 (기본 10MB, 최대 수GB)

3. 사전 파티셔닝

에디터 로딩 중...

Shuffle Read/Write 확인하기

Spark UI에서:

에디터 로딩 중...

또는 코드에서:

에디터 로딩 중...