批次處理 進階

Spark 效能調優

AI 練習作答

請說明 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.memoryspark.driver.memory
  • 增加 spark.memory.fraction(Execution Memory 佔比)。
  • 避免 collect() 大量資料到 Driver。

4. 序列化

使用 Kryo 序列化代替預設 Java 序列化,速度快 10x。

5. 持久化策略

重複使用的 DataFrame 使用 cache()persist(),減少重複計算。

✦ AI 模擬面試

輸入你的答案,AI 即時分析精準度與改進空間

登入後即可使用 AI 評分