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 的「Create batch」(建立批次) 頁面

  2. 在「Properties」(屬性) 區段中,按一下「Add Property」(新增屬性)。

  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 要求中,使用支援的 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,會將 Managed Service for Apache Spark 執行階段和資源層級屬性設為 standard 層級 (請參閱資源分配屬性)。
  • 將這個批次級別屬性設為 premium,會將 spark.dataproc.engine 設為 lightningEngine,並將 spark.dataproc.driver.compute.tier 和 spark.dataproc.executor.compute.tier 設為 premium。 您可以覆寫大部分自動設定的批次級別設定,但如果批次使用的執行階段早於 3.0,則無法覆寫自動設定的「運算」級別設定 (請參閱資源分配屬性)。
standard

引擎和執行階段屬性

屬性 說明 預設
spark.dataproc.engine 用於執行批次工作負載或互動式工作階段的引擎:lightningEngine (請參閱「Lightning Engine」) 或 default 引擎。
  • 批次工作負載:如果您為工作負載選取標準 dataproc.tier 屬性,這項屬性會自動設為 default,且無法覆寫。如果您為工作負載選取 premium dataproc.tier,這項屬性會自動設為 lightningEngine,但您可以視需要將設定變更為 default。
  • 互動式工作階段:這項設定會自動設為 default,但您可以變更為 lightningEngine。請注意,互動式工作階段一律會以 premium 級執行。在 Google Cloud 控制台的「建立執行階段設定檔」頁面建立執行階段設定檔 (工作階段範本) 時,系統會預設選取「進階」級別和「啟用 Lightning Engine 來提升效能」 (設定 spark.dataproc.engine=lightningEngine)。
  • 批次 (標準級):default
  • 批次 (進階級):lightningEngine
  • 工作階段: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」)。

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

512m、2g
spark.driver.memoryOverhead

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

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

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

驅動程式記憶體的 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」)。

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

512m、2g
spark.executor.memoryOverhead

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

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

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

執行器記憶體的 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。