Spark 屬性

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

設定 Spark 批次工作負載屬性

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

控制台

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

    前往 Dataproc 建立批次

  2. 在「Properties」部分中,按一下「Add Property」

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

gcloud

gcloud CLI 批次提交範例:

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

API

batches.create 要求中,使用支援的 Spark 屬性設定 RuntimeConfig.properties

支援的 Spark 屬性

Spark 專用的 Dataproc Serverless 支援大多數 Spark 屬性,但不支援 YARN 相關和 shuffle 相關的 Spark 屬性,例如 spark.master=yarnspark.shuffle.service.enabled。如果 Spark 應用程式程式碼設定 YARN 或洗牌屬性,應用程式就會失敗。

執行階段環境屬性

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

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

資源分配屬性

Dataproc Serverless for Spark 支援下列 Spark 屬性,可用於設定資源分配:

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

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

每個驅動程式核心的總驅動程式記憶體,包括驅動程式記憶體額外負擔,必須介於標準運算層的 1024m7424m 之間 (Premium 運算層為 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.memoryOverhead 加上 spark.driver.memory 的總和。

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

10% 的驅動程式記憶體 (PySpark 批次工作負載除外,該工作負載預設為 40% 的驅動程式記憶體) 512m2g
spark.dataproc.driver.compute.tier 驅動程式要使用的運算級別。Premium 運算層可提供更高的單一核心效能,但收費率也較高。standard 標準、Premium
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 驅動程式在本機和隨機儲存空間中使用的磁碟層級。雖然 Premium 磁碟等級的 IOPS 和總處理量效能較佳,但收費率也較高。如果在驅動程式上選取了 Premium 磁碟層級,則必須使用 spark.dataproc.driver.compute.tier=premium 選取 Premium 運算層級,並使用 spark.dataproc.executor.disk.size 指定磁碟空間的數量。

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

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

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

每個執行緒核心的執行緒記憶體總量 (包括執行緒記憶體額外負擔),必須介於標準運算層的 1024m7424m 之間 (Premium 運算層為 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.memoryOverhead 加上 spark.executor.memory 的總和。

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

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

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

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

自動調度資源屬性

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