本文档介绍了 Spark 属性及其设置方法。 Serverless for Apache Spark 使用 Spark 属性来确定 要分配给批量工作负载的计算、内存和磁盘资源。 这些属性设置可能会影响工作负载配额消耗和费用。如需了解详情,请参阅 Serverless for Apache Spark 配额和 Serverless for Apache Spark 价格。
设置 Spark 批量工作负载属性
控制台
在 Google Cloud 控制台中,前往 Dataproc 创建批次 页面。
在属性 部分中,点击添加属性 。
gcloud
gcloud CLI 批次提交示例:
gcloud dataproc batches submit spark --properties=spark.checkpoint.compress=true \ --region=region \ other args ...
API
将 RuntimeConfig.properties 设置为包含受支持的 Spark 属性,作为 batches.create 请求的一部分。
受支持的 Spark 属性
Serverless for Apache Spark 支持大多数 Spark 属性,但它
不支持与 YARN 和 shuffle 相关的 Spark 属性,例如
spark.master=yarn 和 spark.shuffle.service.enabled。如果 Spark 应用
代码设置 YARN 或 shuffle 属性,则应用将失败。
运行时环境属性
Serverless for Apache Spark 支持以下自定义 Spark 属性 ,用于配置运行时环境:
| 属性 | 说明 |
|---|---|
spark.dataproc.driverEnv.ENVIRONMENT_VARIABLE_NAME |
将 ENVIRONMENT_VARIABLE_NAME 添加到驱动程序进程。您可以指定多个环境变量。 |
spark.executorEnv.ENVIRONMENT_VARIABLE_NAME |
将 ENVIRONMENT_VARIABLE_NAME 添加到执行程序进程。您可以指定多个环境变量。 |
层级属性
| 属性 | 说明 | 默认 |
|---|---|---|
dataproc.tier |
批量工作负载运行的层级,可以是 standard 或 premium(请参阅 Google Cloud Serverless for Apache Spark 层级)交互式
会话始终以优质 dataproc.tier 运行。
|
standard |
引擎和运行时属性
| 属性 | 说明 | 默认 |
|---|---|---|
spark.dataproc.engine |
用于运行批量工作负载或交互式会话的引擎:lightningEngine
(请参阅 Lightning 引擎)或 default 引擎。
|
|
spark.dataproc.lightningEngine.runtime |
为批量工作负载或交互式会话选择 Lightning 引擎时要使用的运行时:default 或 native(原生查询执行)。
|
default |
资源分配属性
Serverless for Apache 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 |
要在驱动程序上使用的计算层级。 优质计算层级提供更高的单核心性能,但 按更高的费率计费。 | 标准 | 标准、优质 |
spark.dataproc.driver.disk.size |
分配给驱动程序的磁盘空间量,
使用大小单位后缀(“k”“m”“g”或“t”)指定。
必须至少为 250GiB。
如果在驱动程序上选择了优质磁盘层级,则有效大小为
375g、750g、1500g、3000g、6000g 或 9000g。如果选择了优质
磁盘层级和 16 个驱动程序核心,
则最小磁盘大小为 750g。 |
每个核心 100GiB |
1024g、2t |
spark.dataproc.driver.disk.tier |
要在驱动程序上用于本地和 shuffle 存储的磁盘层级。
优质磁盘层级在 IOPS 和吞吐量方面提供更好的性能,但
按更高的费率计费。如果在驱动程序上选择了优质磁盘层级,则还必须使用 spark.dataproc.driver.compute.tier=premium 选择优质计算层级,并且必须使用 spark.dataproc.executor.disk.size 指定磁盘空间量。如果选择了优质磁盘层级,则驱动程序会为系统存储分配额外的 50GiB 磁盘空间,用户应用无法使用该空间。 |
标准 | 标准、优质 |
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 |
要在执行程序上使用的计算层级。 优质计算层级提供更高的单核心性能,但 按更高的费率计费。 | 标准 | 标准、优质 |
spark.dataproc.executor.disk.size |
分配给每个执行程序的磁盘空间量,
使用大小单位后缀("k"、"m"、"g" 或 "t")指定。
执行程序磁盘空间可用于 shuffle 数据和暂存
依赖项。必须至少为 250GiB。
如果在执行程序上选择了优质磁盘层级,则有效大小为
375g、750g、1500g、3000g、6000g 或 9000g。如果选择了优质
磁盘层级和 16 个执行程序核心,
则最小磁盘大小为 750g。 |
每个核心 100GiB |
1024g、2t |
spark.dataproc.executor.disk.tier |
要在执行程序上用于本地和 shuffle 存储的磁盘层级。
优质磁盘层级在 IOPS 和吞吐量方面提供更好的性能,但
按更高的费率计费。如果在执行程序上选择了优质磁盘层级,则还必须使用 spark.dataproc.executor.compute.tier=premium 选择优质计算层级,并且必须使用 spark.dataproc.executor.disk.size 指定磁盘空间量。如果选择了优质磁盘层级,则每个执行程序会分配额外的 50GiB 磁盘空间用于系统存储,用户应用无法使用该空间。 |
标准 | 标准、优质 |
spark.executor.instances |
要分配的执行程序的初始数量。批量工作负载
开始后,自动扩缩可能会更改活跃执行程序的数量。必须
至少为 2,且最多为 2000。 |
自动扩缩属性
如需查看可用于配置 Serverless for Apache Spark 自动扩缩的 Spark 属性列表,请参阅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 |
在调度时排除 shuffle 映射倾斜的执行程序,这可以减少 长 shuffle 提取等待时间,这些时间由 shuffle 写入倾斜导致。 | false |
true |
spark.scheduler.shuffleSkew.minFinishedTasks |
执行程序上完成的 shuffle 映射任务的最小数量 以视为倾斜。 | 10 |
100 |
spark.scheduler.shuffleSkew.maxExecutorsNumber |
要视为倾斜的执行程序的最大数量。倾斜的执行程序 将从当前调度轮次中排除。 | 5 | 10 |
spark.scheduler.shuffleSkew.maxExecutorsRatio |
要视为倾斜的执行程序总数的最大比率。倾斜的执行程序 将从调度中排除。 | 0.05 | 0.1 |
spark.scheduler.shuffleSkew.ratio |
执行程序上完成的 shuffle 映射任务的平均数量的倍数,以视为倾斜。 | 1.5 | 2.0 |
其他属性
| 属性 | 说明 |
|---|---|
dataproc.diagnostics.enabled |
启用此属性可在批量工作负载失败或 取消时运行诊断。如果启用了诊断,则批量工作负载会在工作负载完成后继续使用 计算资源 ,直到诊断完成。 指向诊断 tar 文件位置的 URI 列在 Batch.RuntimeInfo.diagnosticOutputUri API 字段中。 |
dataproc.gcsConnector.version |
使用此属性可升级到与批量工作负载的 运行时版本安装的版本不同的 Cloud Storage 连接器版本 。 |
dataproc.sparkBqConnector.version |
使用此属性可升级到与批量工作负载的 运行时版本安装的版本不同的 Spark BigQuery 连接器版本 (请参阅 将 BigQuery 连接器与 Serverless for Apache Spark 搭配使用)。 |
dataproc.profiling.enabled |
将此属性设置为 true 可为
Serverless for Apache Spark 工作负载启用分析。 |
dataproc.profiling.name |
使用此属性可设置用于在 Profiler 服务上创建配置文件的名称。 |
spark.jars |
使用此属性可设置以英文逗号分隔的 jar 列表,以包含在驱动程序和执行程序类路径中 |
spark.archives |
使用此属性可设置以英文逗号分隔的归档列表,以提取到每个执行程序的工作目录中。支持 .jar、.tar.gz、.tgz 和 .zip。对于无服务器交互式会话,请在创建交互式会话/模板时添加此属性 |
dataproc.artifacts.remove |
使用此属性可移除 Serverless for Apache Spark 运行时上安装的默认工件。支持的工件包括 spark-bigquery-connector、
iceberg 和 delta-lake。 |