728x90
반응형
1️⃣ 데이터 읽기 최적화
👉 읽는 양을 줄이는 게 1순위
- CSV ❌ → Parquet / ORC ✅
- select("*") ❌ → 필요한 컬럼만
- filter는 최대한 앞에서
- partition 컬럼으로 조회
2️⃣ Shuffle 최소화
👉 Spark 느려지는 가장 큰 이유
- 불필요한 groupBy, distinct 제거
- join 전에 row / 컬럼 줄이기
- 작은 테이블은 broadcast join
- 무분별한 repartition 금지
3️⃣ Partition 전략
👉 병렬 처리의 기본
- 파티션 수 = 데이터 크기 / 128MB
- 파티션 너무 많아도 ❌, 적어도 ❌
- 줄일 땐 coalesce
- 늘릴 땐 repartition
4️⃣ Join 최적화
👉 대부분 성능 이슈의 원인
- 작은 테이블 broadcast
- join key null 제거
- join 전에 filter 적용
- 데이터 skew 의심
5️⃣ 캐시 / 메모리
👉 필요할 때만
- 같은 df 여러 번 쓸 때만 cache
- 한번 쓰고 버릴 df는 ❌
- Storage 탭에서 확인
6️⃣ Action 관리
👉 Action = Spark Job
- count(), show() 남발 ❌
- 디버깅 후 제거
- collect() 웬만하면 ❌
7️⃣ 파일 출력 최적화
👉 나중 쿼리 속도 영향 큼
- 너무 작은 파일 ❌
- partitionBy 적절히
- 압축 사용 (snappy)
- 필요 시 coalesce 후 write
8️⃣ 데이터 스큐 대응 (중급)
👉 한 Task만 오래 걸릴 때
- broadcast join
- salting
- Spark 3 skew hint
9️⃣ Spark UI 분석
👉 감 말고 증거
- DAG → shuffle 위치
- Stages → 느린 task
- Storage → cache 상태
🔟 설정(Tuning) (고급)
👉 마지막 단계
- executor memory / cores
- shuffle partitions
- dynamic allocation
🎯 한 줄 요약
Spark 최적화는읽기 → shuffle → 파티션 → join → 캐시 → UI이 순서로 본다
📌 이것만 외워도 충분
- Shuffle 줄이기
- Partition 맞추기
- Parquet 사용
- Spark UI 확인
728x90
반응형
'DataEngineering > Spark' 카테고리의 다른 글
| spark ui 에서 병목찾는법 (0) | 2026.01.30 |
|---|---|
| Suffle이란? (1) | 2026.01.30 |
| df.cache() 를 언제 써야하나? (0) | 2026.01.30 |
| Dataframe 이란? (0) | 2026.01.30 |
| Lazy Evaluation 이란? (0) | 2026.01.30 |