Spark 屬性

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

設定 Spark 批次工作負載屬性

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

控制台

  1. 在 Google Cloud 控制台中,前往 Dataproc 建立批次頁面。

    前往 Dataproc 的「建立批次」頁面

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

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

gcloud

gcloud CLI 批次提交範例:

gcloud dataproc batches submit spark
    --properties=spark.checkpoint.compress=true \
    --region=region \
    other args ...

API

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

支援的 Spark 屬性

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

執行階段環境屬性

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

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

資源分配屬性

Serverless 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 個驅動程式核心,磁碟大小下限為 750 GB。 每個核心 100GiB 1024g2t
spark.dataproc.driver.disk.tier 用於驅動程式本機和隨機儲存空間的磁碟層級。 進階磁碟層級的 IOPS 和總處理量效能較佳,但計費費率較高。如果在驅動程式上選取 Premium 磁碟層級,也必須使用 spark.dataproc.driver.compute.tier=premium 選取 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 和總處理量效能較佳,但計費費率較高。如果在執行器上選取 Premium 磁碟層級,也必須使用 spark.dataproc.executor.compute.tier=premium 選取 Premium 運算層級,並使用 spark.dataproc.executor.disk.size 指定磁碟空間量。

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

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

自動調度資源屬性

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