借助 Managed Service for Apache Spark 自动调优功能,您无需手动配置即可优化周期性批量工作负载,从而提高性能和弹性。自动调优功能无需您评估复杂的 Spark 参数,而是会分析之前的运行(称为同类群组),并根据 Spark 最佳实践自动应用设置。
本文档介绍了如何自动调节 Managed Service for Apache Spark 批量工作负载。由于 Spark 配置选项众多,且难以评估这些选项对工作负载的影响,因此优化 Spark 工作负载以提高性能和弹性可能具有挑战性。Managed Service for Apache Spark 自动调节功能可替代手动工作负载配置,它会根据 Spark 优化最佳实践和工作负载运行(称为“同类群组”)分析,自动将 Spark 配置设置应用于周期性 Spark 工作负载。
注册 Managed Service for Apache Spark 自动调优
如需注册以获取对本页面中所述的 Managed Service for Apache Spark 自动调节预览版的访问权限,请填写并提交 Managed Service for Apache Spark 预览版访问权限请求注册表单。表单获得批准后,表单中列出的项目便可使用预览版功能。
优势
Managed Service for Apache Spark 自动调节功能可提供以下优势:
- 自动优化:自动调整低效的 Managed Service for Apache Spark 批处理和 Spark 配置,从而加快作业运行速度。
- 历史学习:从周期性运行中学习,以应用针对您的工作负载量身定制的建议。
自动调节同类群组
自动调优会应用于批处理工作负载的周期性执行(同类群组)。
您在提交批处理工作负载时指定的同类群组名称会将其标识为周期性工作负载的连续运行之一。
自动调优会按如下方式应用于批处理工作负载队列:
系统会计算自动调节并将其应用于工作负载的第二个及后续同类群组。自动调节不适用于周期性工作负载的首次运行,因为 Managed Service for Apache Spark 自动调节功能会使用工作负载历史记录进行优化。
自动调节不会追溯应用于正在运行的工作负载,而只会应用于新提交的工作负载。
自动调优功能会通过分析同类群组统计信息,随着时间的推移不断学习和改进。 为了让系统收集足够的数据,我们建议您至少在五次运行中保持启用自动调优功能。
同类群组名称:建议的做法是使用有助于识别周期性工作负载类型的同类群组名称。例如,您可以将 daily_sales_aggregation 用作运行每日销售汇总任务的计划工作负载的同类群组名称。
自动调节场景
如果适用,自动调优会自动选择并执行以下 scenarios 或目标,以优化批处理工作负载:
- 扩缩:Spark 自动扩缩配置设置。
- 联接优化:用于优化 SQL 广播联接性能的 Spark 配置设置。
- Shuffle 分区:用于调整 shuffle 分区的 Spark 配置设置。
使用 Managed Service for Apache Spark 自动调节功能
您可以使用 Google Cloud 控制台、Google Cloud CLI、Dataproc API 或 Cloud 客户端库,在批处理工作负载上启用 Managed Service for Apache Spark 自动调节功能。
控制台
如需在每次提交周期性批量工作负载时启用 Managed Service for Apache Spark 自动调节功能,请执行以下步骤:
在 Google Cloud 控制台中,前往 Managed Service for Apache Spark 作业页面。
如需创建批处理工作负载,请点击提交作业以打开提交作业页面。
在为作业选择计算类型下,确认已选择无服务器 Spark。
在无服务器作业详情部分:
- 指定任务 ID 或接受默认 ID。
- 选择运行时配置文件(或为您的区域保留默认服务配置),然后点击摘要卡片中的配置(或点击运行时配置文件菜单中的创建新配置文件),打开运行时配置文件配置面板。
- 在运行时配置文件配置面板中,展开其他配置,然后点击其他自定义旁边的修改。
在其他自定义项面板中的自动调节下:
- 点击启用切换开关,为 Spark 批处理工作负载启用自动调节。
- 同类群组 ID:填写同类群组 ID,用于将批处理标识为一系列周期性工作负载之一。自动调节功能会应用于使用此同类群组 ID 提交的第二个及后续工作负载。例如,将
daily_sales_aggregation指定为运行每日销售汇总任务的计划批处理工作负载的同类群组 ID。
在其他自定义面板中点击保存,然后在运行时配置文件配置面板中点击使用配置(或保存新配置文件)。
根据需要在提交作业页面上填写文件和工件以及作业执行和属性部分,然后点击提交。 如需详细了解这些字段,请参阅提交批处理工作负载。
gcloud
如需在每次提交周期性批量工作负载时启用 Managed Service 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
如需在每次提交周期性批量工作负载时启用 Managed Service for Apache Spark 自动调节,请提交包含以下字段的 batches.create 请求:
RuntimeConfig.cohort:同类群组名称,用于将批处理标识为一系列周期性工作负载之一。自动调节功能会应用于使用此同类群组名称提交的第二个及后续工作负载。例如,对于运行每日销售汇总任务的计划批量工作负载,请指定daily_sales_aggregation作为同类群组名称。AutotuningConfig.scenarios:指定AUTO以在 Spark 批处理工作负载上启用自动调优。
示例:
...
runtimeConfig:
cohort: COHORT_NAME
autotuningConfig:
scenarios:
- AUTO
...
Java
在尝试此示例之前,请按照《Managed Service for Apache Spark 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 Managed Service for Apache Spark Java API 参考文档。
如需向 Managed Service for Apache Spark 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需在每次提交周期性批量工作负载时启用 Managed Service 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
在尝试此示例之前,请按照《Managed Service for Apache Spark 快速入门:使用客户端库》中的 Python 设置说明进行操作。 如需了解详情,请参阅 Managed Service for Apache Spark Python API 参考文档。
如需向 Managed Service for Apache Spark 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需在每次提交周期性批量工作负载时启用 Managed Service 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
如需在 Managed Service for Apache Airflow 中更新软件包,请参阅为 Managed Airflow 安装 Python 依赖项。
查看自动调优更改
如需查看 Managed Service 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 控制台的批处理作业详情页面(点击作业页面的无服务器 Spark 标签页上的批处理任务 ID)的摘要标签页下,查看应用于正在运行、已完成或失败的工作负载的最新自动调节更改。

价格
在非公开预览版期间,Managed Service for Apache Spark 自动调节功能免费提供。适用标准 Managed Service for Apache Spark 价格。