本文档介绍了如何启用 Dataproc Spark 性能增强功能,以帮助 Dataproc Spark 作业在更短的时间内处理更多数据,同时降低费用。
Dataproc Spark 性能增强功能包括:
- Spark 优化器增强功能:
- 为优化 Spark 方案而编写的优化器规则
- 改进了在 Spark 作业中使用 Dataproc BigQuery 连接器时的性能
- Spark 执行增强功能:
- Spark 执行引擎改进
其他 Dataproc 性能改进:请参阅 Dataproc 集群缓存,这有助于缩短访问 Cloud Storage 中的数据所花费的时间。
您可以在集群上或 Spark 作业上启用 Spark 性能增强功能:
默认情况下,在集群上启用的 Spark 性能增强功能会应用于在集群上运行的所有 Spark 作业,无论是提交到 Dataproc 服务还是直接提交到集群。
您还可以在提交到 Dataproc 服务的作业上启用或停用 Spark 性能增强功能。应用于作业的 Spark 性能增强功能设置仅会替换在集群级层为指定作业设置的任何冲突设置。
价格
Spark 性能增强功能不会产生额外费用。您需要按标准 Dataproc on Compute Engine 价格付费。
注意事项
Spark 性能增强功能会调整 Spark 属性,包括以下属性:
spark.sql.shuffle.partitions
:对于2.2
映像版本集群,Spark 性能增强功能会将此属性设置为1000
。此设置可能会导致小型作业速度变慢。spark.dataproc.sql.catalog.file.index.stats.enabled
:如果 Hive 分区数量较多,此设置可能会导致驱动程序 OOM(内存不足)情况。停用此属性可以解决 OOM 情况。
在创建集群时启用增强功能
在使用 2.0.69+、2.1.17+、2.2.0+ 版本映像及更高版本映像创建 Dataproc 集群时,您可以使用 Google Cloud 控制台、Google Cloud CLI 和 Dataproc API 启用 Dataproc Spark 性能增强功能。
控制台
- 在 Google Cloud 控制台中,打开 Dataproc 创建集群页面。
- 在创建 Dataproc 集群表单上,点击 Compute Engine 上的集群行中的创建。
- 在在 Compute Engine 上创建 Dataproc 集群页面上,点击自定义集群面板,然后滚动到集群属性部分。
- 如需启用 Spark 优化增强功能,请执行以下操作:
- 点击 + 添加属性。
- 在前缀列表中选择 spark,然后在键字段中添加“spark.dataproc.enhanced.optimizer.enabled”,并在值字段中添加“true”。
- 如需启用 Spark 执行增强功能,请执行以下操作:
- 点击 + 添加属性。
- 在前缀列表中选择 spark,然后在键字段中添加“spark.dataproc.enhanced.execution.enabled”,并在值字段中添加“true”。
- 如需启用 Spark 优化增强功能,请执行以下操作:
- 完成填写或确认其他集群创建字段,然后点击创建。
gcloud
在终端窗口或 Cloud Shell 中以本地方式运行以下 gcloud dataproc clusters create 命令。
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --region=REGION \ --image-version=IMAGE \ --properties=PROPERTIES
注意:
- CLUSTER_NAME:集群名称(在项目中必须是唯一的)。该名称必须以小写字母开头,最多可包含 51 个小写字母、数字和连字符,不能以连字符结尾。已删除集群的名称可以再次使用。
- PROJECT_ID:要与此集群关联的项目。
- REGION:集群所在的 Compute Engine 区域,例如
us-central1
。- 您可以添加可选的
--zone=ZONE
标志,以在指定区域内指定可用区,例如us-central1-a
。如果您未指定可用区,Dataproc 自动选择可用区功能会在指定区域内选择可用区。
- 您可以添加可选的
- IMAGE:Dataproc Spark 优化器和执行性能增强功能适用于 Dataproc 映像版本
2.0.69+
和2.1.17+
及更高版本。如果您省略此标志,Dataproc 会为集群选择默认 Dataproc on Compute Engine 映像的最新次要版本(请参阅默认 Dataproc 映像版本)。 PROPERTIES:
- 如需启用 Spark 优化增强功能,请指定:
spark:spark.dataproc.enhanced.optimizer.enabled=true
- 如需启用 Spark 执行增强功能,请指定:
spark:spark.dataproc.enhanced.execution.enabled=true
- 如需启用 Spark 优化和执行增强功能,请指定:
spark:spark.dataproc.enhanced.optimizer.enabled=true,spark:spark.dataproc.enhanced.execution.enabled=true
API
在
clusters.create
请求中指定以下SoftwareConfig.properties
:- 如需启用 Spark 优化增强功能,请指定:
"spark:spark.dataproc.enhanced.optimizer.enabled": "true"
- 如需启用 Spark 执行增强功能,请指定:
"spark:spark.dataproc.enhanced.execution.enabled": "true"
- 如需启用 Spark 优化和执行增强功能,请指定:
"spark:spark.dataproc.enhanced.optimizer.enabled": "true","spark:spark.dataproc.enhanced.execution.enabled": "true"
在提交作业时启用或停用增强功能
您可以使用 Google Cloud 控制台、Google Cloud CLI 和 Dataproc API 在提交给 Dataproc 服务的 Spark 作业上启用或停用 Spark 性能增强功能。
控制台
- 在 Google Cloud 控制台中,打开 Dataproc 作业页面。
- 在作业页面上,点击提交作业,然后滚动到作业的属性部分。
- 如需启用 Spark 优化增强功能,请执行以下操作:
- 点击 + 添加属性。 在键字段中添加“spark.dataproc.enhanced.optimizer.enabled”,并在值字段中添加“true”。
- 如需启用 Spark 执行增强功能,请执行以下操作:
- 点击 + 添加属性。
- 在键字段中添加“spark.dataproc.enhanced.execution.enabled”,并在值字段中添加“true”。
- 如需启用 Spark 优化增强功能,请执行以下操作:
- 完成填写或确认其他作业提交字段,然后点击提交。
gcloud
在终端窗口或 Cloud Shell 中以本地方式运行以下 gcloud dataproc jobs submit 命令。
gcloud dataproc jobs submit SPARK_JOB_TYPE \ --cluster=CLUSTER_NAME \ --region=REGION \ --properties=PROPERTIES
注意:
- SPARK_JOB_TYPE:指定
spark
、pyspark
、spark-sql
或spark-r
。 - CLUSTER_NAME:作业将在其中运行的集群的名称。
- REGION:集群所在的区域。
PROPERTIES:
- 如需启用 Spark 优化增强功能,请指定:
spark.dataproc.enhanced.optimizer.enabled=true
- 如需启用 Spark 执行增强功能,请指定:
spark.dataproc.enhanced.execution.enabled=true
- 如需启用 Spark 优化和执行增强功能,请指定:
spark.dataproc.enhanced.optimizer.enabled=true,spark.dataproc.enhanced.execution.enabled=true
- SPARK_JOB_TYPE:指定
API
在
jobs.submit
请求中,为 SparkJob、PySparkJob、SparkSqlJob 或 SparkRJob 指定以下properties
:- 如需启用 Spark 优化增强功能,请指定:
"spark.dataproc.enhanced.optimizer.enabled=true"
- 如需启用 Spark 执行增强功能,请指定:
"spark.dataproc.enhanced.execution.enabled=true"
- 如需启用 Spark 优化和执行增强功能,请指定:
"spark.dataproc.enhanced.execution.enabled=true,spark.dataproc.enhanced.optimizer.enabled=true"