本文提供自動調整 Spark 工作負載的相關資訊。由於 Spark 設定選項眾多,且難以評估這些選項對工作負載的影響,因此要針對效能和復原能力最佳化 Spark 工作負載可能相當困難。 Google Cloud 無伺服器型 Apache Spark 自動調整功能可根據 Spark 最佳化最佳做法和工作負載執行分析,自動將 Spark 設定套用至週期性 Spark 工作負載,取代手動設定工作負載。
註冊 Google Cloud Serverless for Apache Spark 自動調校功能
如要註冊使用本頁面所述的 Serverless for Apache Spark 自動調整功能預先發布版,請填寫並提交 Dataproc 預先發布版存取權申請註冊表單。表單通過核准後,表單中列出的專案就能使用預先發布版功能。
優點
Google Cloud Serverless for Apache Spark 自動調整功能可帶來以下好處:
- 提升效能:調整最佳化設定,進一步提升效能
- 加快最佳化速度:自動設定可避免耗時的手動設定測試
- 提升韌性:自動分配記憶體,避免發生記憶體相關故障
限制
Google Cloud Serverless for Apache Spark 自動調校功能有下列限制:
- 系統會計算自動調整結果,並套用至工作負載的第二次及後續執行。由於 Google Cloud Serverless for Apache Spark 自動調校功能會使用工作負載記錄進行最佳化,因此系統不會自動調校週期性工作負載的首次執行。
- 不支援縮減記憶體。
- 自動調整功能不會追溯套用至執行中的工作負載,只會套用至新提交的工作負載群組。
自動微調同類群組
自動調校功能會套用至批次工作負載的週期性執行作業,稱為「同類群組」。
提交工作負載時指定的同類群組名稱,會將該工作負載識別為週期性工作負載的後續執行作業之一。建議您使用可說明工作負載類型的同類群組名稱,或有助於識別工作負載執行作業的名稱,做為週期性工作負載的一部分。舉例來說,如果排定的工作負載會執行每日銷售匯總工作,請將群組名稱指定為 daily_sales_aggregation
。
自動調整情境
您可以選取下列一或多個自動調校情境,將 Google Cloud Serverless for Apache Spark 自動調校功能套用至工作負載:
MEMORY
:自動調整 Spark 記憶體分配,預測及避免潛在的工作負載記憶體不足錯誤。修正先前因記憶體不足 (OOM) 錯誤而失敗的工作負載。SCALING
:自動微調 Spark 自動調度資源設定。BROADCAST_HASH_JOIN
:自動調整 Spark 設定,以最佳化 SQL 廣播聯結效能。
定價
Google Cloud 預先發布版期間,Serverless for Apache Spark 自動調校功能免費提供。適用標準的 Google Cloud Serverless for Apache Spark 定價。
區域可用性
您可以在可用的 Compute Engine 區域中提交批次,並使用 Google Cloud Serverless for Apache Spark 自動調校功能。
使用 Google Cloud 無伺服器 Apache Spark 自動調校功能
如要對工作負載啟用 Google Cloud Serverless for Apache Spark 自動調整功能,可以使用 Google Cloud 控制台、Google Cloud CLI 或 Dataproc API。
控制台
如要在每次提交週期性批次工作負載時啟用 Google Cloud Serverless for Apache Spark 自動調校功能,請執行下列步驟:
在 Google Cloud 控制台中,前往 Dataproc 的「Batches」(批次) 頁面。
如要建立批次工作負載,請按一下「建立」。
在「Container」(容器) 區段中,填寫 Spark 工作負載的下列欄位:
視需要填寫「建立批次」頁面的其他部分,然後按一下「提交」。如要進一步瞭解這些欄位,請參閱「提交批次工作負載」。
gcloud
如要在每次提交週期性批次工作負載時啟用 Google Cloud Serverless for Apache Spark 自動調校功能,請在本機終端機視窗或 Cloud Shell 中執行下列 gcloud CLI gcloud dataproc batches submit
指令。
gcloud dataproc batches submit COMMAND \ --region=REGION \ --cohort=COHORT \ --autotuning-scenarios=SCENARIOS \ other arguments ...
更改下列內容:
- COMMAND:Spark 工作負載類型,例如
Spark
、PySpark
、Spark-Sql
或Spark-R
。 - REGION:工作負載執行的區域。
COHORT:同類群組名稱,可將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,如果排定的工作負載會執行每日銷售量匯總工作,請將
daily_sales_aggregation
指定為同類群組名稱。SCENARIOS:以半形逗號分隔的一或多個自動調整情境,可用於最佳化工作負載,例如
--autotuning-scenarios=MEMORY,SCALING
。每次提交批次同類群組時,您都可以變更情境清單。
API
如要在每次提交週期性批次工作負載時啟用無伺服器 Apache Spark 自動調校功能,請提交 batches.create 要求,並加入下列欄位: Google Cloud
RuntimeConfig.cohort
:同類群組名稱,可將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,如果排定的工作負載會執行每日銷售匯總工作,請將群組名稱指定為daily_sales_aggregation
。AutotuningConfig.scenarios
:一或多個自動調整情境,用於最佳化工作負載,例如BROADCAST_HASH_JOIN
、MEMORY
和SCALING
。 每次提交批次同類群組時,您都可以變更情境清單。
範例:
...
runtimeConfig:
cohort: daily_sales_aggregation
autotuningConfig:
scenarios:
- BROADCAST_HASH_JOIN
- MEMORY
- SCALING
...
Java
在試用這個範例之前,請先按照Java「無伺服器 Apache Spark 快速入門:使用用戶端程式庫」中的設定說明操作。詳情請參閱 Serverless for Apache Spark Java API 參考說明文件。
如要向 Serverless for Apache Spark 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
如要在每次提交週期性批次工作負載時啟用 Apache Spark 自動調度資源功能,請使用包含下列欄位的 CreateBatchRequest,呼叫 BatchControllerClient.createBatch: Google Cloud
Batch.RuntimeConfig.cohort
:同類群組名稱,用於將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,您可能會將daily_sales_aggregation
指定為排定工作負載的同類群組名稱,該工作負載會執行每日銷售匯總工作。Batch.RuntimeConfig.AutotuningConfig.scenarios
:一或多個自動調整情境,用於最佳化工作負載,例如BROADCAST_HASH_JOIN
、MEMORY
、SCALING
。每次提交批次群組時,您都可以變更情境清單。 如需完整情境清單,請參閱 AutotuningConfig.Scenario Javadoc。
範例:
...
Batch batch =
Batch.newBuilder()
.setRuntimeConfig(
RuntimeConfig.newBuilder()
.setCohort("daily_sales_aggregation")
.setAutotuningConfig(
AutotuningConfig.newBuilder()
.addScenarios(Scenario.SCALING))
...
.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
在試用這個範例之前,請先按照Python「無伺服器 Apache Spark 快速入門:使用用戶端程式庫」中的設定說明操作。詳情請參閱 Serverless for Apache Spark Python API 參考說明文件。
如要向 Serverless for Apache Spark 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
如要在每次提交週期性批次工作負載時啟用 Apache Spark 自動調度資源無伺服器功能,請使用包含下列欄位的 Batch 呼叫 BatchControllerClient.create_batch: Google Cloud
batch.runtime_config.cohort
:同類群組名稱,用於將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,您可能會將daily_sales_aggregation
指定為排定工作負載的同類群組名稱,該工作負載會執行每日銷售匯總工作。batch.runtime_config.autotuning_config.scenarios
:用於最佳化工作負載的一或多個自動調整情境,例如BROADCAST_HASH_JOIN
、MEMORY
、SCALING
。您可以在每次提交批次同類群組時變更情境清單。如需完整情境清單,請參閱情境參考資料。
範例:
# 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.SCALING
]
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
如要在每次提交週期性批次工作負載時啟用 Apache Spark 自動調度資源無伺服器功能,請使用包含下列欄位的 Batch 呼叫 BatchControllerClient.create_batch: Google Cloud
batch.runtime_config.cohort
:同類群組名稱,用於將批次識別為一系列週期性工作負載之一。自動調整功能會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,您可能會將daily_sales_aggregation
指定為排定工作負載的同類群組名稱,該工作負載會執行每日銷售匯總工作。batch.runtime_config.autotuning_config.scenarios
:一或多個自動調整情境,用於最佳化工作負載,例如BROADCAST_HASH_JOIN
、MEMORY
、SCALING
。您可以在每次提交批次同類群組時變更情境清單。如需完整情境清單,請參閱情境參考資料。
範例:
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.SCALING,
]
}
},
},
batch_id="BATCH_ID",
)
如要使用 API,請務必使用 google-cloud-dataproc
用戶端程式庫 5.10.1
以上版本。您可以採用下列 Airflow 環境需求:
google-cloud-dataproc>=5.10.1
如要在 Cloud Composer 中更新套件,請參閱「為 Cloud Composer 安裝 Python 依附元件 」。
查看自動調整變更
如要查看 Apache Spark 無伺服器自動調整批次工作負載的變更,請執行 gcloud dataproc batches describe
指令。 Google Cloud
範例:gcloud dataproc batches describe
輸出內容會與下列內容相似:
...
runtimeInfo:
propertiesInfo:
# Properties set by autotuning.
autotuningProperties
spark.driver.memory:
annotation: Driver OOM was detected
value: 11520m
spark.driver.memoryOverhead:
annotation: Driver OOM was detected
value: 4608m
# Old overwritten properties.
userProperties
...
如要查看套用至執行中、已完成或失敗工作負載的最新自動調整變更,請前往 Google Cloud 控制台的「批次詳細資料」頁面,然後點選「調查」分頁。