本文提供有關 Google Cloud Serverless for Apache Spark 自動調度資源的資訊。提交 Spark 工作負載時,Serverless for Apache Spark 可以動態調度工作負載資源 (例如執行器數量),有效率地執行工作負載。Apache Spark 無伺服器自動調度資源是預設行為,並使用 Spark 動態資源分配,判斷是否要調度工作負載資源、如何調度,以及調度時機。
Serverless for Apache Spark 自動調度 V2
Serverless for Apache Spark 自動調度資源版本 2 (V2) 在預設版本 1 (V1) 中新增功能並進行改良,可協助您管理 Serverless for Apache Spark 工作負載、提升工作負載效能,以及節省費用:
- 非同步節點縮減:自動調度資源 V2 會以非同步縮減作業,取代 V1 的同步縮減作業。使用非同步縮減功能時,Serverless for Apache Spark 會縮減工作負載資源,不必等待所有節點完成隨機遷移。也就是說,緩慢縮減的長尾節點不會阻礙升級。
- 智慧型節點縮減選取:自動調度資源 V2 會以智慧型演算法取代 V1 的隨機節點選取,找出最適合優先縮減的節點。這項演算法會考量節點的隨機資料大小和閒置時間等因素。
- 可設定的 Spark 正常終止和隨機遷移行為: 自動調度 V2 可讓您使用標準 Spark 屬性,設定 Spark 正常終止和隨機遷移。這項功能可協助您維持與自訂 Spark 屬性的遷移相容性。
Serverless for Apache Spark 自動調度功能
功能 | Serverless for Apache Spark 自動調度資源 V1 | Serverless for Apache Spark Autoscaling V2 |
節點縮減 | 同步 | 非同步 |
用於縮減節點的節點選取器 | 隨機 | 智慧技術 |
Spark 安全停用和隨機遷移 | 無法設定 | 可自行設定 |
Spark 動態分配屬性
下表列出提交批次工作負載時可設定的 Spark 動態分配屬性,用於控制自動調度資源 (請參閱如何設定 Spark 屬性)。
屬性 | 說明 | 預設 |
---|---|---|
spark.dataproc.scaling.version |
Serverless for Apache Spark 的 Spark 自動調度版本。指定版本 1 或 2 (請參閱「Serverless for Apache Spark 自動調度資源 V2」)。 |
1 |
spark.dynamicAllocation.enabled |
是否使用動態資源分配,根據工作負載調高或調低執行者數量。將值設為 false 即可停用工作負載的自動調整功能。預設值:true 。 |
true |
spark.dynamicAllocation.initialExecutors |
分配給工作負載的執行者初始數量。工作負載啟動後,自動調度資源可能會變更有效執行器的數量。最小值為 2 ,最大值為 2000 。 |
2 |
spark.dynamicAllocation.minExecutors |
工作負載縮減時的執行器數量下限。
最小值為 2 。 |
2 |
spark.dynamicAllocation.maxExecutors |
工作負載可擴充的執行器數量上限。值不得超過 2000 。 |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
自訂 Spark 工作負載的擴充作業。接受 0 到 1 之間的值。1.0 值可提供最大擴充能力,並協助達到最大平行處理程度。值為 0.5 時,擴充功能和並行程度會設為最大值的一半。 |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
設為 true 時,如果擷取作業因 Spark 動態分配而從已停用的執行器失敗,系統會從 Spark 驅動程式擷取隨機輸出位置。這項功能可減少因淘汰的執行器將隨機區塊遷移至現有執行器而導致的 ExecutorDeadException 錯誤,並減少因 FetchFailedException 錯誤而導致的階段重試次數 (請參閱「FetchFailedException caused by ExecutorDeadException」)。這項屬性適用於 Serverless for Apache Spark Spark 執行階段版本
1.1.12 以上和 2.0.20 以上。 |
false |
Spark 動態分配指標
Spark 批次工作負載會產生下列與 Spark 動態資源分配相關的指標 (如要進一步瞭解 Spark 指標,請參閱「監控和儀表化」)。
指標 | 說明 |
---|---|
maximum-needed |
目前負載下滿足所有執行中和待處理工作所需的執行器數量上限。 |
running |
執行工作的執行者數量。 |
Spark 動態分配問題和解決方法
FetchFailedException caused by ExecutorDeadException
原因:當 Spark 動態分配縮減執行器時,隨機播放檔案會遷移至即時執行器。不過,由於執行器上的 Spark reducer 工作會在 reducer 工作啟動時,從 Spark 驅動程式設定的位置擷取 shuffle 輸出內容,因此如果遷移 shuffle 檔案,reducer 仍會嘗試從已停用的執行器擷取 shuffle 輸出內容,導致
ExecutorDeadException
和FetchFailedException
錯誤。解決方案:執行 Serverless for Apache Spark 批次工作負載時,將
spark.reducer.fetchMigratedShuffle.enabled
設為true
,即可啟用重組位置重新擷取功能 (請參閱「設定 Spark 批次工作負載屬性」)。啟用這項屬性後,如果從已停用的執行器擷取資料失敗,縮減器工作會從驅動程式重新擷取隨機輸出位置。