15분
장애 보고서: 배치 잡이 8시간째 안 끝나요
Spark 성능 튜닝: Shuffle과 Skew 정복
장애 보고서: 배치 잡이 8시간째 안 끝나요
Spark 심화: Streaming & Delta Lake > Spark 성능 튜닝: Shuffle과 Skew 정복
학습 목표
Spark 성능 문제의 일반적인 원인을 파악한다 성능 튜닝의 중요성을 인식한다
"어제까진 30분이면 끝났는데요..."
월요일 아침 7시. 주말 동안 배치 잡이 안 끝났다고 알림이 울린다.
에디터 로딩 중...
"뭐가 문제지?"
코드는 바뀐 게 없다. 데이터도 평소와 비슷하다. 근데 왜...?
범인 찾기: Spark UI를 열어보니
에디터 로딩 중...
Task 200 혼자 7시간째 돌고 있었다.
알고 보니:
에디터 로딩 중...
Data Skew: 데이터가 한쪽으로 쏠림.
Spark가 느려지는 5가지 이유
| 원인 | 증상 | 빈도 |
|---|---|---|
| Data Skew | 한 Task만 오래 걸림 | 매우 흔함 |
| Shuffle | Stage 사이 대기 시간 | 흔함 |
| OOM | Executor 죽음 | 흔함 |
| Small Files | Task 수가 너무 많음 | 흔함 |
| 잘못된 Join | 메모리 폭발 | 가끔 |
오늘 이 모든 것을 다룬다.
성능 튜닝 전에 알아야 할 것
Spark 실행 구조
에디터 로딩 중...
핵심 용어
| 용어 | 의미 |
|---|---|
| Job | 하나의 Action (count, write 등) |
| Stage | Shuffle 기준으로 나뉜 작업 단위 |
| Task | 파티션 하나를 처리하는 단위 |
| Shuffle | 데이터 재분배 (네트워크 I/O) |
이번 Day에서 배울 것
- Shuffle 최소화: 왜 Shuffle이 느린지, 어떻게 줄이는지
- Data Skew 해결: Salting, Broadcast Join
- 메모리 튜닝: OOM 방지
- 파티셔닝 전략: 적절한 파티션 수
시작하자.