批次處理 進階
Spark 效能調優
請說明 Spark 常見的效能問題與調優方法。
1. 減少 Shuffle
Shuffle 是最大瓶頸。調優方法:
- 使用 Broadcast Join(當一側表小於 10MB,廣播到所有 Executor 避免 Shuffle)。
- 預先聚合(Pre-aggregation)再 Join。
- 調整
spark.sql.shuffle.partitions(預設 200,大資料量應增加)。
2. 處理資料傾斜
使用 explain() 確認是否有傾斜,然後:
- 加鹽(Salting):在熱點 Key 加隨機後綴打散,處理後再合併。
- AQE(Adaptive Query Execution):Spark 3.x 的自動傾斜處理,啟用
spark.sql.adaptive.enabled=true。
3. 記憶體管理
- 調整
spark.executor.memory和spark.driver.memory。 - 增加
spark.memory.fraction(Execution Memory 佔比)。 - 避免 collect() 大量資料到 Driver。
4. 序列化
使用 Kryo 序列化代替預設 Java 序列化,速度快 10x。
5. 持久化策略
重複使用的 DataFrame 使用 cache() 或 persist(),減少重複計算。
✦ AI 模擬面試
輸入你的答案,AI 即時分析精準度與改進空間
登入後即可使用 AI 評分
