Spark 提交任務時主要可調的資源配置參數包括 Driver 資源(內存、CPU)、Executor 資源(數量、內存、CPU)以及 集群管理相關參數。配置和優化時一般結合集群硬件資源、數據規模、作業類型和作業復雜度(SQL / 機器學習) 來綜合設置。
下面是提交過程參數配置實例:
spark-submit --driver-memory 4g \ # 指定Driver進程的內存大小(堆內存),影響不大。
--num-executors 15 # Executor 的總數量,Standalone/K8s 可直接設定;Yarn默認會動態分配。
--executor-memory 8g \ # 指定每個Executor的內存大小(堆內存),一般都是Execution會出現OOM,因為Storage會落盤。
--executor-cores 3 \ # 指定每個Executor核心數(真正并行數),4核心建議設成3。
--queue root.default \ # 設置Yarn的資源隊列。
--conf spark.yarn.executor.memoryOverhead=2048 \ # 設置堆外內存大小,默認executor-memory的10%。
--conf spark.core.connection.ack.wait.timeout=300 # 設置通訊等待超時時間。
# 例如集群有15臺機器,每臺2個CPU核心,則指定15個Executor每個的核心為2。總并行度 = num-executors × executor-cores,盡量大于等于總分區數
資源優化的策略包括:
- 內存分配:
executor-memory ≈ 節點內存 ÷ 每節點 Executor 數量 - 預留空間;
num-executors × executor-cores 不要超過節點總核數。 - 并行度:一般建議 總 cores ≈ 分區數 或者稍大一些。SQL 場景調節 spark.sql.shuffle.partitions(默認 200 通常過大/過小都不好)。
- 動態分配:在資源緊張的環境或多租戶模式下建議開啟,可避免資源浪費。