20분
Shuffle: 성능의 가장 큰 적
Spark 성능 튜닝: Shuffle과 Skew 정복
Shuffle: 성능의 가장 큰 적
Spark 심화: Streaming & Delta Lake > Spark 성능 튜닝: Shuffle과 Skew 정복
학습 목표
Shuffle이 발생하는 원인을 이해한다 Shuffle의 비용을 파악한다 Shuffle을 줄이는 기본 전략을 안다
Shuffle: 왜 비싼가?
Shuffle = 데이터를 네트워크로 재분배
에디터 로딩 중...
Shuffle이 비싼 이유
- 디스크 I/O: Map 결과를 디스크에 씀
- 네트워크 I/O: 다른 노드로 전송
- 정렬: 키 기준으로 정렬
- 직렬화/역직렬화: 데이터 변환
경험칙: Shuffle이 전체 시간의 80%를 차지하기도 함
Shuffle을 일으키는 연산들
| 연산 | Shuffle? | 이유 |
|---|---|---|
| filter, map | X | 파티션 내 처리 |
| groupBy + agg | O | 같은 키를 모아야 함 |
| join | O | 같은 키를 매칭해야 함 |
| orderBy (전역) | O | 전체 정렬 |
| distinct | O | 중복 제거 |
| repartition | O | 파티션 재구성 |
| coalesce | △ | 줄이기만 하면 X |
Shuffle 줄이는 기본 전략
1. 미리 필터링
에디터 로딩 중...
2. Broadcast Join (작은 테이블)
에디터 로딩 중...
조건: 작은 테이블이 메모리에 들어가야 함 (기본 10MB, 최대 수GB)
3. 사전 파티셔닝
에디터 로딩 중...
Shuffle Read/Write 확인하기
Spark UI에서:
에디터 로딩 중...
또는 코드에서:
에디터 로딩 중...