本文說明 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 屬性。
控制台
- 在 Google Cloud 控制台中,前往「Dataproc create batch」(建立 Dataproc 批次) 頁面。 
- 在「資源」部分中,按一下「新增資源」。 
- 輸入支援的 Spark 屬性的 - Key(名稱) 和- Value。
gcloud
gcloud CLI 批次提交範例:
gcloud dataproc batches submit spark --properties=spark.checkpoint.compress=true \ --region=region \ other args ...
API
在 batches.create 要求中,將 RuntimeConfig.properties 設為支援的 Spark 屬性。
支援的 Spark 屬性
Serverless for Apache Spark 支援大多數的 Spark 屬性,但不支援 YARN 相關和隨機播放相關的 Spark 屬性,例如 spark.master=yarn 和 spark.shuffle.service.enabled。如果 Spark 應用程式程式碼設定了 YARN 或隨機播放屬性,應用程式就會失敗。
執行階段環境屬性
Serverless for Apache Spark 支援下列自訂 Spark 屬性,可設定執行階段環境:
| 屬性 | 說明 | 
|---|---|
| spark.dataproc.driverEnv.ENVIRONMENT_VARIABLE_NAME | 將 ENVIRONMENT_VARIABLE_NAME 新增至驅動程式程序。您可以指定多個環境變數。 | 
| spark.executorEnv.ENVIRONMENT_VARIABLE_NAME | 將 ENVIRONMENT_VARIABLE_NAME 新增至執行器程序。您可以指定多個環境變數。 | 
層級屬性
| 屬性 | 說明 | 預設 | 
|---|---|---|
| dataproc.tier | 批次工作負載執行的層級,可以是 standard或premium(請參閱「Google Cloud Serverless for Apache Spark 層級」)。互動式工作階段一律會在dataproc.tier進階層級執行。 | standard | 
引擎和執行階段屬性
| 屬性 | 說明 | 預設 | 
|---|---|---|
| spark.dataproc.engine | 用於執行批次工作負載或互動式工作階段的引擎: lightningEngine(請參閱「Lightning 引擎」) 或default引擎。
 | 
 | 
| spark.dataproc.lightningEngine.runtime | 為批次工作負載或互動式工作階段選取 Lightning Engine 時要使用的執行階段: default或native(原生查詢執行)。 | default | 
資源分配屬性
Serverless for Apache Spark 支援下列 Spark 屬性,可設定資源分配:
| 屬性 | 說明 | 預設 | 範例 | 
|---|---|---|---|
| spark.driver.cores | 要分配給 Spark 驅動程式的核心 (vCPU) 數量。
        有效值為 4、8、16。 | 4 | |
| spark.driver.memory | 要分配給 Spark 驅動程式程序的記憶體量,以 JVM 記憶體字串格式指定,並加上大小單位後置字元 (「m」、「g」或「t」)。 每個驅動程式核心的驅動程式記憶體總量,包括驅動程式記憶體負擔,必須介於  | 512m、2g | |
| spark.driver.memoryOverhead | 要分配給 Spark 驅動程式程序的額外 JVM 記憶體量,以 JVM 記憶體字串格式指定,並加上大小單位後置字元 (「m」、「g」或「t」)。 這是與 JVM 負荷、內部字串和其他原生負荷相關聯的非堆積記憶體,包括其他驅動程式程序使用的記憶體,例如 PySpark 驅動程式程序,以及在容器中執行的其他非驅動程式程序使用的記憶體。驅動程式執行的容器記憶體大小上限取決於  每個驅動程式核心的驅動程式記憶體總量 (包括驅動程式記憶體負擔) 必須介於  | 驅動程式記憶體的 10%,但 PySpark 批次工作負載除外,這類工作負載預設為驅動程式記憶體的 40% | 512m、2g | 
| 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 | 1024g、2t | 
| 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) 數量。
        有效值為 4、8、16。 | 4 | |
| spark.executor.memory | 要分配給每個 Spark 執行器程序的記憶體量,以 JVM 記憶體字串格式指定,並加上大小單位後置字串 (「m」、「g」或「t」)。 每個執行器核心的執行器記憶體總量 (包括執行器記憶體額外負荷) 必須介於  | 512m、2g | |
| spark.executor.memoryOverhead | 要分配給 Spark 執行器程序的額外 JVM 記憶體量,以 JVM 記憶體字串格式指定,並加上大小單位字尾 (「m」、「g」或「t」)。 這是用於 JVM 負荷、內部字串和其他原生負荷的非堆積記憶體,包括 PySpark 執行器記憶體,以及在容器中執行的其他非執行器程序所用的記憶體。執行器執行的容器記憶體大小上限取決於  每個執行器核心的執行器記憶體總量 (包括執行器記憶體額外負荷) 必須介於  | 執行器記憶體的 10%,但 PySpark 批次工作負載除外,這類工作負載預設為執行器記憶體的 40% | 512m、2g | 
| 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 | 1024g、2t | 
| 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()。有效記錄層級包括:ALL、DEBUG、ERROR、FATAL、INFO、OFF、TRACE和WARN。 | INFO、DEBUG | |
| spark.executor.syncLogLevel.enabled | 如果設為 true,透過SparkContext.setLogLevel()方法套用的記錄層級會傳播至所有執行器。 | false | true、false | 
| spark.log.level.PackageName | 設定後,系統會覆寫所有使用者定義的記錄設定,效果等同於在 Spark 啟動時呼叫 SparkContext.setLogLevel(PackageName, level)。有效記錄層級包括:ALL、DEBUG、ERROR、FATAL、INFO、OFF、TRACE和WARN。 | 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 | 啟用這項屬性,即可對批次工作負載失敗或取消執行診斷。如果啟用診斷功能,批次工作負載會在完成後繼續使用 運算資源,直到診斷完成為止。指向診斷資訊 tar 檔案位置的 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 格式。如為無伺服器互動工作階段,請在建立互動工作階段/範本時新增這項屬性 |