Spark 屬性

本文說明 Spark 屬性及設定方式。Managed Service for Apache Spark 會使用 Spark 屬性,判斷要為批次工作負載分配的運算、記憶體和磁碟資源。這些資源設定可能會影響工作負載配額用量和費用。詳情請參閱「Managed Service for Apache Spark 配額」和「Managed Service for Apache Spark 定價」。

設定 Spark 批次工作負載屬性

使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API提交 Managed Service for Apache Spark 批次工作負載時,可以指定 Spark 屬性。

控制台

  1. 在 Google Cloud 控制台中,前往「Managed Service for Apache Spark create batch」(建立 Managed Service for Apache Spark 批次) 頁面。

    前往 Managed Service for Apache Spark 建立批次

  2. 在「資源」部分中,按一下「新增資源」

  3. 輸入支援的 Spark 屬性Key (名稱) 和 Value

gcloud

以下是 gcloud CLI 批次提交範例。多個屬性以半形逗號分隔。

gcloud dataproc batches submit spark \
    --properties=spark.checkpoint.compress=true,spark.driver.cores=8  \
    --region=REGION \
    other args ...

API

batches.create 要求中,將 RuntimeConfig.properties 設為支援的 Spark 屬性

支援的 Spark 屬性

Managed Service for Apache Spark 支援大多數的 Spark 屬性,但不支援 YARN 相關和隨機相關的 Spark 屬性,例如 spark.master=yarnspark.shuffle.service.enabled。如果 Spark 應用程式程式碼設定了 YARN 或隨機屬性,應用程式就會失敗。

執行階段環境屬性

Managed Service for Apache Spark 支援下列自訂 Spark 屬性,可設定執行階段環境:

屬性 說明
spark.dataproc.driverEnv.ENVIRONMENT_VARIABLE_NAME ENVIRONMENT_VARIABLE_NAME 新增至驅動程式程序。您可以指定多個環境變數。
spark.executorEnv.ENVIRONMENT_VARIABLE_NAME ENVIRONMENT_VARIABLE_NAME 新增至執行器程序。您可以指定多個環境變數。

層級屬性

屬性 說明 預設
dataproc.tier 批次工作負載執行的層級,可以是 standardpremium (請參閱「Managed Service for Apache Spark 層級」)。互動式工作階段一律會在 dataproc.tier 進階層級執行。
  • 將這個批次層級屬性設為 standard,即可將 Managed Service for Apache Spark 執行階段和資源層級屬性設為 standard 層級 (請參閱資源分配屬性)。
  • 將這個批次層級屬性設為 premium,會將 spark.dataproc.engine 設為 lightningEngine,並將 spark.dataproc.driver.compute.tierspark.dataproc.executor.compute.tier 設為 premium。 您可以覆寫大部分自動設定的批次層級設定,但使用 3.0 之前的執行階段時,無法覆寫自動設定的運算層級設定 (請參閱資源分配屬性)。
standard

引擎和執行階段屬性

屬性 說明 預設
spark.dataproc.engine 用於執行批次工作負載或互動式工作階段的引擎:lightningEngine (請參閱「Lightning 引擎」) 或 default 引擎。
  • 批次工作負載:如果您為工作負載選取標準 dataproc.tier 屬性,這項屬性會自動設為 default,且無法覆寫。如果為工作負載選取 premium dataproc.tier,這項屬性會自動設為 lightningEngine,但您可以視需要將設定變更為 default
  • 互動式工作階段:這項設定會自動設為 default, 但您可以將這項設定變更為 lightningEngine。請注意,互動式工作階段一律會在 premium 層級執行。
  • 批次 (標準級):default
  • 批次 (進階級):lightningEngine
  • 工作階段:default
spark.dataproc.lightningEngine.runtime 為批次工作負載或互動式工作階段選取 Lightning Engine 時要使用的執行階段:defaultnative (原生查詢執行)。 default

資源分配屬性

Managed Service for Apache Spark 支援下列 Spark 屬性,可設定資源分配:

屬性 說明 預設 範例
spark.driver.cores 要分配給 Spark 驅動程式的核心 (vCPU) 數量。 有效值:4816 4
spark.driver.memory

要分配給 Spark 驅動程式程序的記憶體量,以 JVM 記憶體字串格式指定,並加上大小單位後置字元 (「m」、「g」或「t」)。

每個驅動程式核心的驅動程式記憶體總量,包括驅動程式記憶體負擔,必須介於 1024m7424m 之間 (適用於標準運算層級,24576m 則適用於進階運算層級)。舉例來說,如果 spark.driver.cores = 4,則 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m

512m2g
spark.driver.memoryOverhead

要分配給 Spark 驅動程式程序的額外 JVM 記憶體量,以 JVM 記憶體字串格式指定,並加上大小單位後置字元 (「m」、「g」或「t」)。

這是與 JVM 負荷、內部字串和其他原生負荷相關聯的非堆積記憶體,包括其他驅動程式程序使用的記憶體,例如 PySpark 驅動程式程序,以及在容器中執行的其他非驅動程式程序使用的記憶體。驅動程式執行的容器記憶體大小上限取決於 spark.driver.memoryOverheadspark.driver.memory 的總和。

每個驅動程式核心的驅動程式記憶體總量 (包括驅動程式記憶體負擔) 必須介於 1024m7424m 之間 (適用於標準運算層級,24576m 則適用於進階運算層級)。舉例來說,如果 spark.driver.cores = 4,則 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m

驅動程式記憶體的 10%,但 PySpark 批次工作負載除外,這類工作負載預設為驅動程式記憶體的 40% 512m2g
spark.dataproc.driver.compute.tier 要在驅動程式上使用的運算層級。進階運算層級可提供更高的單一核心效能,但計費費率較高。 standard 標準、進階
spark.dataproc.driver.disk.size 分配給驅動程式的磁碟空間量,以大小單位後置字元 (「k」、「m」、「g」或「t」) 指定。必須至少為 250GiB。如果在驅動程式上選取 Premium 磁碟層級,有效大小為 375g、750g、1500g、3000g、6000g 或 9000g。如果選取 Premium 磁碟層級和 16 個驅動程式核心,磁碟大小至少須為 750g。 每個核心 100GiB 1024g2t
spark.dataproc.driver.disk.tier 用於驅動程式本機和隨機儲存空間的磁碟層級。進階磁碟層級的 IOPS 和總處理量效能較佳,但計費費率較高。如果在驅動程式上選取進階磁碟層級,也必須使用 spark.dataproc.driver.compute.tier=premium 選取進階運算層級,並使用 spark.dataproc.executor.disk.size 指定磁碟空間量。

如果選取 Premium 磁碟層級,驅動程式會額外分配 50 GiB 的磁碟空間做為系統儲存空間,使用者應用程式無法使用這部分空間。

standard 標準、進階
spark.executor.cores 要分配給每個 Spark 執行器的核心 (vCPU) 數量。 有效值:4816 4
spark.executor.memory

要分配給每個 Spark 執行器程序的記憶體量,以 JVM 記憶體字串格式指定,並加上大小單位後置字串 (「m」、「g」或「t」)。

每個執行器核心的執行器記憶體總量 (包括執行器記憶體額外負荷) 必須介於 1024m7424m 之間 (標準運算層級),24576m 則為進階運算層級。舉例來說,如果 spark.executor.cores = 4,則 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m

512m2g
spark.executor.memoryOverhead

要分配給 Spark 執行器程序的額外 JVM 記憶體量,以 JVM 記憶體字串格式指定,並加上大小單位後置字元 (「m」、「g」或「t」)。

這是用於 JVM 負荷、內部字串和其他原生負荷的非堆積記憶體,包括 PySpark 執行器記憶體,以及在容器中執行的其他非執行器程序所用的記憶體。執行器執行的容器記憶體大小上限取決於 spark.executor.memoryOverheadspark.executor.memory 的總和。

每個執行器核心的執行器記憶體總量 (包括執行器記憶體額外負荷) 必須介於 1024m7424m 之間 (適用於標準運算層級,24576m 則適用於進階運算層級)。舉例來說,如果 spark.executor.cores = 4,則 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m

執行器記憶體的 10%,但 PySpark 批次工作負載除外,這類工作負載預設為執行器記憶體的 40% 512m2g
spark.dataproc.executor.compute.tier 要在執行器上使用的運算層級。進階運算層級可提供更高的單一核心效能,但費率也較高。 standard 標準、進階
spark.dataproc.executor.disk.size 分配給每個執行器的磁碟空間量,以大小單位後置字串 (「k」、「m」、「g」或「t」) 指定。執行器磁碟空間可用於隨機資料和暫存依附元件。不得小於 250GiB,如果執行器選取 Premium 磁碟層級,有效大小為 375g、750g、1500g、3000g、6000g 或 9000g。如果選取 Premium 磁碟層和 16 個執行器核心,磁碟大小下限為 750 GB。 每個核心 100GiB 1024g2t
spark.dataproc.executor.disk.tier 用於執行器本機和隨機存取的磁碟層級。進階磁碟層級的 IOPS 和總處理量效能較佳,但計費費率較高。如果在執行器上選取進階磁碟層級,也必須使用 spark.dataproc.executor.compute.tier=premium 選取進階運算層級,並使用 spark.dataproc.executor.disk.size 指定磁碟空間量。

如果選取 Premium 磁碟層級,每個執行器會額外分配 50 GiB 的磁碟空間做為系統儲存空間,使用者應用程式無法使用這部分空間。

standard 標準、進階
spark.executor.instances 要配置的執行者初始數量。批次工作負載啟動後,自動調度資源可能會變更有效執行器的數量。不得小於 2 且不得大於 2000

自動調度資源屬性

如需可用於設定 Managed Service for Apache Spark 自動調度資源的 Spark 屬性清單,請參閱 Spark 動態分配屬性

記錄屬性

屬性 說明 預設 範例
spark.log.level 設定後,系統會覆寫所有使用者定義的記錄設定,效果等同於在 Spark 啟動時呼叫 SparkContext.setLogLevel()。有效記錄層級包括:ALLDEBUGERRORFATALINFOOFFTRACEWARN INFODEBUG
spark.executor.syncLogLevel.enabled 如果設為 true,透過 SparkContext.setLogLevel() 方法套用的記錄層級會傳播至所有執行器。 false truefalse
spark.log.level.PackageName 設定後,系統會覆寫所有使用者定義的記錄設定,效果等同於在 Spark 啟動時呼叫 SparkContext.setLogLevel(PackageName, level)。有效的記錄層級包括:ALLDEBUGERRORFATALINFOOFFTRACEWARN spark.log.level.org.apache.spark=error

排程屬性

屬性 說明 預設 範例
spark.scheduler.excludeShuffleSkewExecutors 排定時間時,排除隨機地圖偏斜的執行器,可減少隨機寫入偏斜造成的隨機擷取等待時間過長。 false true
spark.scheduler.shuffleSkew.minFinishedTasks 執行器上完成的隨機洗牌地圖工作數量下限, 可視為偏斜。 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber 視為偏斜的執行器數量上限。系統會將偏差的執行者排除在目前的排程輪次之外。 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio 視為偏斜的執行器總數比例上限。系統不會排定傾斜的執行器。 0.05 0.1
spark.scheduler.shuffleSkew.ratio 將執行器上完成的平均隨機洗牌地圖工作數乘以這個值,即可視為偏斜。 1.5 2.0

其他屬性

屬性 說明
dataproc.diagnostics.enabled **僅支援 2.3 以下的執行階段**。啟用這項屬性,即可對批次工作負載失敗或取消進行診斷。啟用診斷功能後,批次工作負載會在完成後繼續使用 運算資源,直到診斷完成為止。指向診斷 tar 檔案位置的 URI 會列在 Batch.RuntimeInfo.diagnosticOutputUri API 欄位中。
dataproc.gcsConnector.version **僅支援 2.3 以下的執行階段**。使用這項屬性升級至Cloud Storage 連接器版本,該版本與批次工作負載執行階段版本安裝的版本不同。
dataproc.sparkBqConnector.version **僅支援 2.3 以下的執行階段**。使用這項屬性升級至Spark BigQuery 連接器版本,該版本與批次工作負載執行階段版本安裝的版本不同 (請參閱「搭配 Managed Service for Apache Spark 使用 BigQuery 連接器」)。
dataproc.profiling.enabled **僅支援 2.3 以下的執行階段**。將這個屬性設為 true,即可為 Managed Service for Apache Spark 工作負載啟用剖析功能。
dataproc.profiling.name **僅適用於 2.3 以上的執行階段**:使用這個屬性設定在 Profiler 服務建立剖析檔所用的名稱。
spark.jars 使用這項屬性設定以半形逗號分隔的 Jar 清單,以便納入驅動程式和執行器類別路徑
spark.archives 使用這個屬性設定以逗號分隔的封存清單,這些封存會解壓縮到各項執行程式的工作目錄。支援 .jar、.tar.gz、.tgz 和 .zip 格式。如為無伺服器互動工作階段,請在建立互動工作階段/範本時新增這項屬性
dataproc.artifacts.remove 使用這項屬性移除Managed Service for Apache Spark 執行階段上安裝的預設構件。 支援的構件包括 conscryptdelta-lakeicebergrapidsspark-bigquery-connector