Spark 属性

本文档介绍了 Spark 属性及其设置方法。 Serverless for Apache Spark 使用 Spark 属性来确定 要分配给批量工作负载的计算、内存和磁盘资源。 这些属性设置可能会影响工作负载配额消耗和费用。如需了解详情,请参阅 Serverless for Apache Spark 配额Serverless for Apache Spark 价格

设置 Spark 批量工作负载属性

您可以使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API 提交 Serverless for Apache Spark Spark 批量工作负载时,指定 Spark 属性。

控制台

  1. 在 Google Cloud 控制台中,前往 Dataproc 创建批次 页面。

    前往 Dataproc 创建批次

  2. 属性 部分中,点击添加属性

  3. 输入受支持的 Spark 属性的 Key(名称)和 Value

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=yarnspark.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 批量工作负载运行的层级,可以是 standardpremium(请参阅 Google Cloud Serverless for Apache Spark 层级)交互式 会话始终以优质 dataproc.tier 运行。
  • 将此批次层级属性设置为 standard 会将 Dataproc 运行时和资源层级属性 设置为 standard 层级(请参阅资源分配属性)。
  • 将此批次层级属性设置为 premium 会将 spark.dataproc.engine 设置为 lightningEngine,并将 spark.dataproc.driver.compute.tierspark.dataproc.executor.compute.tier 设置为 premium。 您可以替换大多数自动设置的批次层级设置,但对于使用早于 3.0 的运行时的批次,无法替换自动设置的 计算 层级设置(请参阅 资源分配属性)。
standard

引擎和运行时属性

属性 说明 默认
spark.dataproc.engine 用于运行批量工作负载或交互式会话的引擎:lightningEngine (请参阅 Lightning 引擎)或 default 引擎。
  • 批量工作负载:如果您为工作负载选择标准 dataproc.tier 属性,则此属性会自动设置为 default,并且无法替换。如果您为工作负载选择 premium dataproc.tier,则此属性会自动设置为 lightningEngine,但您可以根据需要将设置更改为 default
  • 交互式会话:此设置会自动设置为 default,但您可以将此设置更改为 lightningEngine。请注意,交互式会话始终以 premium 层级运行。
  • 批次(标准层级):default
  • 批次(优质层级):lightningEngine
  • 会话:default
spark.dataproc.lightningEngine.runtime 为批量工作负载或交互式会话选择 Lightning 引擎时要使用的运行时:defaultnative原生查询执行)。 default

资源分配属性

Serverless for Apache Spark 支持以下 Spark 属性 ,用于配置资源分配:

属性 说明 默认 示例
spark.driver.cores 要分配给 Spark 驱动程序的核心数 (vCPU)。 有效值:4816 4
spark.driver.memory

要分配给 Spark 驱动程序进程的内存量, 以 JVM 内存字符串格式指定,并带有大小单位后缀(“m”“g” 或“t”)。

每个驱动程序核心的总驱动程序内存(包括驱动程序内存开销), 对于标准计算层级必须介于 1024m7424m 之间 (对于优质计算层级,则为 24576m)。例如,如果 spark.driver.cores = 4,则4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

512m2g
spark.driver.memoryOverhead

要分配给 Spark 驱动程序 进程的额外 JVM 内存量,以 JVM 内存字符串格式指定,并带有大小单位后缀 (“m”“g”或“t”)。

这是与 JVM 开销、 内部字符串和其他原生开销相关的非堆内存,包括 其他驱动程序进程使用的内存(例如 PySpark 驱动程序进程) 以及容器中运行的其他非驱动程序进程使用的内存。 驱动程序运行所在的容器的最大内存大小由 spark.driver.memoryOverheadspark.driver.memory 的总和决定。

每个驱动程序核心的总驱动程序内存(包括驱动程序内存开销) 必须介于 1024m7424m 之间,对于 标准计算层级 (对于优质计算层级,则为 24576m)。例如, 如果 spark.driver.cores = 4,则 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m

驱动程序内存的 10%,但 PySpark 批量工作负载除外, 后者默认为驱动程序内存的 40% 512m2g
spark.dataproc.driver.compute.tier 要在驱动程序上使用的计算层级。 优质计算层级提供更高的单核心性能,但 按更高的费率计费。 标准 标准、优质
spark.dataproc.driver.disk.size 分配给驱动程序的磁盘空间量, 使用大小单位后缀(“k”“m”“g”或“t”)指定。 必须至少为 250GiB。 如果在驱动程序上选择了优质磁盘层级,则有效大小为 375g、750g、1500g、3000g、6000g 或 9000g。如果选择了优质 磁盘层级和 16 个驱动程序核心, 则最小磁盘大小为 750g。 每个核心 100GiB 1024g2t
spark.dataproc.driver.disk.tier 要在驱动程序上用于本地和 shuffle 存储的磁盘层级。 优质磁盘层级在 IOPS 和吞吐量方面提供更好的性能,但 按更高的费率计费。如果在驱动程序上选择了优质磁盘层级,则还必须使用 spark.dataproc.driver.compute.tier=premium 选择优质计算层级,并且必须使用 spark.dataproc.executor.disk.size 指定磁盘空间量。

如果选择了优质磁盘层级,则驱动程序会为系统存储分配额外的 50GiB 磁盘空间,用户应用无法使用该空间。

标准 标准、优质
spark.executor.cores 要分配给每个 Spark 执行程序的核心数 (vCPU)。 有效值:4816 4
spark.executor.memory

要分配给每个 Spark 执行程序进程的内存量, 以 JVM 内存字符串格式指定,并带有大小单位后缀("m"、"g" 或 "t")。

每个执行程序核心的总执行程序内存(包括执行程序内存 开销)对于 标准计算层级必须介于 1024m7424m 之间(对于优质计算层级,则为 24576m)。例如, 如果 spark.executor.cores = 4,则 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m

512m2g
spark.executor.memoryOverhead

要分配给 Spark 执行程序进程的额外 JVM 内存量,以 JVM 内存字符串格式指定,并带有大小单位 后缀(“m”“g”或“t”)。

这是用于 JVM 开销、内部字符串、 和其他原生开销的非堆内存,包括 PySpark 执行程序内存以及 容器中运行的其他非执行程序进程使用的内存。 执行程序运行所在的容器的最大内存大小由 spark.executor.memoryOverheadspark.executor.memory 的总和决定。

每个执行程序核心的总执行程序内存(包括执行程序内存 开销)对于标准计算层级必须介于 1024m7424m 之间 (对于优质计算层级,则为 24576m)。例如, 如果 spark.executor.cores = 4,则 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m

执行程序内存的 10%,但 PySpark 批量工作负载除外, 后者默认为执行程序内存的 40% 512m2g
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 1024g2t
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() 相同。有效的 日志级别包括:ALLDEBUGERRORFATALINFOOFFTRACE、 和WARN INFODEBUG
spark.executor.syncLogLevel.enabled 设置为 true 后,通过 SparkContext.setLogLevel() 方法应用的日志级别会 传播到所有执行程序。 false truefalse
spark.log.level.PackageName 设置后,会替换任何用户定义的日志设置 ,其效果与在 Spark 启动时调用 SparkContext.setLogLevel(PackageName, level) 相同。有效的日志级别包括:ALLDEBUGERRORFATALINFOOFFTRACEWARN 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-connectoricebergdelta-lake