本文說明 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 屬性。
控制台
在 Google Cloud 控制台中,前往「Managed Service for Apache Spark create batch」(Managed Service for Apache Spark 建立批次) 頁面。
前往 Managed Service for Apache Spark 的「Create batch」(建立批次) 頁面
在「Properties」(屬性) 區段中,按一下「Add Property」(新增屬性)。
輸入支援的 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 要求中,使用支援的 Spark 屬性設定 RuntimeConfig.properties。
支援的 Spark 屬性
Managed Service for Apache Spark 支援大多數 Spark 屬性,但不支援與 YARN 和重組相關的 Spark 屬性,例如 spark.master=yarn 和 spark.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 新增至執行工具程序。您可以指定多個環境變數。 |
Tier 資源
| 屬性 | 說明 | 預設 |
|---|---|---|
dataproc.tier |
執行批次工作負載的級別,可以是 standard 或 premium (請參閱「Managed Service for Apache Spark 級別」)。互動式工作階段一律會以進階級 dataproc.tier 執行。
|
standard |
引擎和執行階段屬性
| 屬性 | 說明 | 預設 |
|---|---|---|
spark.dataproc.engine |
用於執行批次工作負載或互動式工作階段的引擎:lightningEngine (請參閱「Lightning Engine」) 或 default 引擎。
|
|
spark.dataproc.lightningEngine.runtime |
為批次工作負載或互動式工作階段選取 Lightning Engine 時,要使用的執行階段:default 或 native (原生查詢執行)。 |
default |
資源分配屬性
Managed Service 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。
如果驅動程式選取進階磁碟級別,有效大小為 375g、750g、1500g、3000g、6000g 或 9000g。如果選取 Premium 磁碟級別和 16 個驅動程式核心,磁碟大小下限為 750 GB。 |
每個核心 100GiB |
1024g、2t |
spark.dataproc.driver.disk.tier |
驅動程式上用於本機和重組儲存空間的磁碟級別。進階磁碟級別在 IOPS 和處理量方面提供更優異的效能,但計費費率較高。如果驅動程式選取進階磁碟級別,則必須使用 spark.dataproc.driver.compute.tier=premium 選取進階運算級別,並使用 spark.dataproc.executor.disk.size 指定磁碟空間量。如果選取進階磁碟級別,驅動程式會為系統儲存空間額外分配 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。
如果執行器選取進階磁碟級別,有效大小為 375g、750g、1500g、3000g、6000g 或 9000g。如果選取 Premium 磁碟級別和 16 個執行器核心,磁碟大小下限為 750 GB。 |
每個核心 100GiB |
1024g、2t |
spark.dataproc.executor.disk.tier |
執行器上本機和重組儲存空間使用的磁碟級別。進階磁碟級別在 IOPS 和處理量方面提供更優異的效能,但計費費率較高。如果執行器選取進階磁碟級別,則必須使用 spark.dataproc.executor.compute.tier=premium 選取進階運算級別,並使用 spark.dataproc.executor.disk.size 指定磁碟空間量。如果選取進階磁碟級別,系統會為每個執行器額外分配 50 GiB 的磁碟空間,用於系統儲存空間,使用者應用程式無法使用。 |
standard | 標準、進階 |
spark.executor.instances |
要分配的初始執行器數量。批次工作負載啟動後,自動調度資源功能可能會變更執行中的執行器數量。必須介於 2 到 2000 之間。 |
自動調度資源屬性
如要查看可用於設定 Managed Service 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 |
**僅適用於 2.3 以下版本的執行階段**。啟用這項屬性,即可在批次工作負載失敗或取消時執行診斷。如果啟用診斷功能,批次工作負載在完成後會繼續使用 運算資源,直到診斷完成為止。Batch.RuntimeInfo.diagnosticOutputUri API 欄位會列出指向診斷 tar 檔案位置的 URI。 |
dataproc.gcsConnector.version |
**僅適用於 2.3 以下版本的執行階段**。使用這項屬性,即可升級至與批次工作負載執行階段版本安裝版本不同的 Cloud Storage 連接器版本。 |
dataproc.sparkBqConnector.version |
**僅適用於 2.3 以下版本的執行階段**。使用這項屬性,即可升級至與批次工作負載執行階段版本安裝版本不同的 Spark BigQuery 連接器版本 (請參閱「搭配使用 BigQuery 連接器和 Managed Service for Apache Spark」)。 |
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 執行階段上安裝的預設構件。
支援的構件為 conscrypt、delta-lake、iceberg、rapids 和 spark-bigquery-connector。 |