本文提供自動調整 Serverless for Apache Spark 批次工作負載的相關資訊。由於 Spark 設定選項眾多,且難以評估這些選項對工作負載的影響,因此最佳化 Spark 工作負載的效能和復原能力可能相當困難。Serverless for Apache Spark 自動調整功能可自動將 Spark 設定套用至週期性 Spark 工作負載,不必手動設定工作負載,並根據 Spark 最佳化最佳做法和工作負載執行分析 (稱為「同類群組」) 進行調整。
註冊使用 Serverless for Apache Spark 自動調校功能
如要申請存取本頁面所述的 Serverless for Apache Spark 自動調度資源預先發布版,請填寫並提交 Dataproc 預先發布版存取要求註冊表單。表單通過核准後,表單中列出的專案就能使用預先發布版功能。
優點
Serverless for Apache Spark 自動調整功能可帶來下列好處:
- 自動最佳化:自動調整效率不彰的 Serverless for Apache Spark 批次和 Spark 設定,可加快作業執行時間。
- 歷來學習:從週期性執行作業中學習,套用專為工作負載量身打造的建議。
自動微調同類群組
自動調校功能會套用至批次工作負載的週期性執行作業 (同類群組)。
提交批次工作負載時指定的同類群組名稱,會將該工作負載識別為週期性工作負載的連續執行作業之一。
系統會對批次工作負載群組套用自動調整功能,如下所示:
系統會計算自動調整結果,並套用至工作負載的第二個和後續同類群組。由於 Serverless for Apache Spark 自動調校功能會使用工作負載記錄進行最佳化,因此不會對週期性工作負載的首次執行套用自動調校。
自動調整功能不會追溯套用至正在執行的工作負載,只會套用至新提交的工作負載。
自動調整功能會分析同類群組的統計資料,隨著時間不斷學習並提升成效。 為讓系統收集足夠的資料,建議您至少執行五次自動調校,並保持啟用狀態。
同類群組名稱:建議使用同類群組名稱,協助識別重複性工作負載類型。舉例來說,您可能會使用 daily_sales_aggregation 做為排程工作負載的同類群組名稱,該工作負載會執行每日銷售匯總工作。
自動調整情境
在適用情況下,自動調整功能會自動選取並執行下列scenarios或目標,以最佳化批次工作負載:
- 調度資源:Spark 自動調度資源設定。
- 聯結最佳化:Spark 設定,可最佳化 SQL 廣播聯結效能。
使用 Serverless for Apache Spark 自動調整功能
如要對批次工作負載啟用 Serverless for Apache Spark 自動調校功能,可以使用 Google Cloud 控制台、Google Cloud CLI、Dataproc API 或 Cloud 用戶端程式庫。
控制台
如要在每次提交週期性批次工作負載時啟用 Serverless for Apache Spark 自動調校功能,請按照下列步驟操作:
前往 Google Cloud 控制台的 Dataproc「Batches」(批次) 頁面。
如要建立批次工作負載,請按一下「建立」。
在「自動調整」專區中:
切換「啟用」按鈕,為 Spark 工作負載啟用自動調整功能。
同類群組:填入同類群組名稱,用來將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,如果排定的批次工作負載會執行每日銷售量匯總工作,您可以將
daily_sales_aggregation指定為群組名稱。
視需要填寫「建立批次」頁面的其他部分,然後按一下「提交」。如要進一步瞭解這些欄位,請參閱「提交批次工作負載」。
gcloud
如要在每次提交週期性批次工作負載時啟用 Serverless for Apache Spark 自動調整功能,請在本機終端機視窗或 Cloud Shell 中執行下列 gcloud CLI gcloud dataproc batches submit 指令。
gcloud dataproc batches submit COMMAND \ --region=REGION \ --cohort=COHORT \ --autotuning-scenarios=auto \ other arguments ...
更改下列內容:
API
如要在每次提交週期性批次工作負載時啟用 Serverless for Apache Spark 自動調校功能,請提交 batches.create 要求,並包含下列欄位:
RuntimeConfig.cohort:同類群組名稱,用於將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,如果排定的批次工作負載會執行每日銷售匯總工作,您可以將daily_sales_aggregation指定為群組名稱。AutotuningConfig.scenarios:指定AUTO,在 Spark 批次工作負載上啟用自動調整功能。
範例:
...
runtimeConfig:
cohort: COHORT_NAME
autotuningConfig:
scenarios:
- AUTO
...
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 Apache Spark 無伺服器快速入門導覽課程」中的 Java 設定操作說明進行操作。詳情請參閱「Serverless for Apache Spark Java API 參考文件」。
如要向 Serverless for Apache Spark 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
如要在每次提交週期性批次工作負載時啟用 Serverless for Apache Spark 自動調校功能,請使用包含下列欄位的 CreateBatchRequest,呼叫 BatchControllerClient.createBatch:
Batch.RuntimeConfig.cohort:同類群組名稱,用於將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,您可能會為排定的批次工作負載指定daily_sales_aggregation做為同類群組名稱,該工作負載會執行每日銷售匯總工作。Batch.RuntimeConfig.AutotuningConfig.scenarios:指定AUTO,啟用 Spark 批次工作負載的自動調整功能。
範例:
...
Batch batch =
Batch.newBuilder()
.setRuntimeConfig(
RuntimeConfig.newBuilder()
.setCohort("daily_sales_aggregation")
.setAutotuningConfig(
AutotuningConfig.newBuilder()
.addScenarios(Scenario.AUTO))
...
.build();
batchControllerClient.createBatch(
CreateBatchRequest.newBuilder()
.setParent(parent)
.setBatchId(batchId)
.setBatch(batch)
.build());
...
如要使用 API,請務必使用 google-cloud-dataproc 用戶端程式庫 4.43.0 以上版本。您可以使用下列任一設定,將程式庫新增至專案。
Maven
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-dataproc</artifactId>
<version>4.43.0</version>
</dependency>
</dependencies>
Gradle
implementation 'com.google.cloud:google-cloud-dataproc:4.43.0'
SBT
libraryDependencies += "com.google.cloud" % "google-cloud-dataproc" % "4.43.0"
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 Apache Spark 無伺服器快速入門導覽課程」中的 Python 設定操作說明進行操作。詳情請參閱「Serverless for Apache Spark Python API 參考文件」。
如要向 Serverless for Apache Spark 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
如要在每次提交週期性批次工作負載時啟用 Serverless for Apache Spark 自動調校功能,請使用包含下列欄位的 Batch 呼叫 BatchControllerClient.create_batch:
batch.runtime_config.cohort:同類群組名稱,用於將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,您可能會將daily_sales_aggregation指定為排定批次工作負載的同類群組名稱,該工作負載會執行每日銷售匯總工作。batch.runtime_config.autotuning_config.scenarios:指定AUTO,啟用 Spark 批次工作負載的自動調整功能。
範例:
# Create a client
client = dataproc_v1.BatchControllerClient()
# Initialize request argument(s)
batch = dataproc_v1.Batch()
batch.pyspark_batch.main_python_file_uri = "gs://bucket/run_tpcds.py"
batch.runtime_config.cohort = "daily_sales_aggregation"
batch.runtime_config.autotuning_config.scenarios = [
Scenario.AUTO
]
request = dataproc_v1.CreateBatchRequest(
parent="parent_value",
batch=batch,
)
# Make the request
operation = client.create_batch(request=request)
如要使用 API,請務必使用 google-cloud-dataproc 用戶端程式庫 5.10.1 以上版本。如要將其新增至專案,請使用下列需求條件:
google-cloud-dataproc>=5.10.1
Airflow
您可以使用 Airflow 安排提交各個週期性批次工作負載的時間,不必手動提交每個自動調整的批次同類群組。如要這麼做,請使用包含下列欄位的 Batch,呼叫 BatchControllerClient.create_batch:
batch.runtime_config.cohort:同類群組名稱,用於將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,您可能會為排定的批次工作負載指定daily_sales_aggregation做為同類群組名稱,該工作負載會執行每日銷售匯總工作。batch.runtime_config.autotuning_config.scenarios:指定AUTO,在 Spark 批次工作負載上啟用自動調整功能。
範例:
create_batch = DataprocCreateBatchOperator(
task_id="batch_create",
batch={
"pyspark_batch": {
"main_python_file_uri": PYTHON_FILE_LOCATION,
},
"environment_config": {
"peripherals_config": {
"spark_history_server_config": {
"dataproc_cluster": PHS_CLUSTER_PATH,
},
},
},
"runtime_config": {
"cohort": "daily_sales_aggregation",
"autotuning_config": {
"scenarios": [
Scenario.AUTO,
]
}
},
},
batch_id="BATCH_ID",
)
如要使用 API,請務必使用 google-cloud-dataproc 用戶端程式庫 5.10.1 以上版本。您可以使用下列 Airflow 環境需求:
google-cloud-dataproc>=5.10.1
如要在 Cloud Composer 中更新套件,請參閱「為 Cloud Composer 安裝 Python 依附元件 」。
查看自動調整變更
如要查看 Serverless for Apache Spark 對批次工作負載的自動調校變更,請執行 gcloud dataproc batches describe 指令。
範例:gcloud dataproc batches describe 輸出內容會與下列內容相似:
...
runtimeInfo:
propertiesInfo:
# Properties set by autotuning.
autotuningProperties:
spark.dataproc.sql.broadcastJoin.hints:
annotation: Converted 1 Sort-Merge Joins to Broadcast Hash Join
value: v2;Inner,<hint>
spark.dynamicAllocation.initialExecutors:
annotation: Adjusted Initial executors based on stages submitted in first
2 minutes to 9
overriddenValue: '2'
value: '9'
spark.dynamicAllocation.maxExecutors:
annotation: Tuned Max executors to 11
overriddenValue: '5'
value: '11'
spark.dynamicAllocation.minExecutors:
annotation: Changed Min executors to 9
overriddenValue: '2'
value: '9'
...
如要查看套用至執行中、已完成或失敗工作負載的最新自動調整變更,請前往 Google Cloud 控制台的「Batch details」(批次詳細資料) 頁面,然後點選「Summary」(摘要) 分頁標籤。

定價
在非公開預先發布期間,您可免費使用 Serverless for Apache Spark 自動調整功能。適用標準的 Serverless for Apache Spark 定價。