本文將說明 Spark 屬性及其設定方式。Dataproc Serverless 會使用 Spark 屬性,判斷要將哪些運算、記憶體和磁碟資源分配給批次工作負載。這些資源設定可能會影響工作負載配額消耗量和費用。詳情請參閱「Dataproc Serverless 配額」和「Dataproc Serverless 定價」。
設定 Spark 批次工作負載屬性
使用 Google Cloud 主控台、gcloud CLI 或 Dataproc API 提交 Dataproc Serverless Spark 批次工作負載時,可以指定 Spark 屬性。
控制台
在 Google Cloud 控制台中,前往「Dataproc create batch」(Dataproc 建立批次) 頁面。
在「Properties」部分中,按一下「Add Property」。
輸入支援的 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=yarn
和 spark.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)。有效值: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 |
驅動程式要使用的運算級別。Premium 運算層可提供更高的單一核心效能,但收費率也較高。 | standard | 標準、Premium |
spark.dataproc.driver.disk.size |
系統會使用大小單位後置字元 (「k」、「m」、「g」或「t」) 指定分配給驅動程式的磁碟空間大小。不得小於 250GiB 。如果駕駛員選取 Premium 磁碟等級,有效大小為 375g、750g、1500g、3000g、6000g 或 9000g。如果選取 Premium 磁碟層級和 16 個驅動程式核心,磁碟大小不得小於 750g。 |
每個核心 100GiB |
1024g 、2t |
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)。有效值: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 |
執行器要使用的運算層級。Premium 運算層級可提供更高的單一核心效能,但收費率也較高。 | standard | 標準、Premium |
spark.dataproc.executor.disk.size |
為每個執行緒分配的磁碟空間量,以大小單位後置字串 (「k」、「m」、「g」或「t」) 指定。執行緒磁碟空間可用於洗牌資料,並將依附元件排程。不得小於 250GiB 。如果在執行緒上選取 Premium 磁碟等級,有效大小為 375g、750g、1500g、3000g、6000g 或 9000g。如果選取 Premium 磁碟層級和 16 個執行緒核心,磁碟大小下限為 750g。 |
每個核心 100GiB |
1024g 、2t |
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() ,藉此覆寫任何使用者定義的記錄設定。有效的記錄層級包括: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 |
啟用此屬性,即可針對批次工作負載失敗或取消執行診斷作業。如果啟用診斷功能,批次工作負載會在工作負載完成後繼續使用 運算資源,直到診斷程序完成為止。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。如為無伺服器互動工作階段,請在建立互動工作階段/範本時新增這個屬性 |