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

batches.create 请求中,将 RuntimeConfig.properties 设置为包含支持的 Spark 属性

支持的 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.EnvironmentVariableName EnvironmentVariableName 添加到驱动程序进程。您可以指定多个环境变量。

资源分配属性

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 之间(对于 Premium 计算层级,则为 24576m)。例如,如果值为 spark.driver.cores = 4,则值为 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m

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

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

standard 标准、高级
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 要在执行器上使用的计算层级。 高级计算层级可提供更高的单核心性能,但费用也更高。 standard 标准、高级
spark.dataproc.executor.disk.size 分配给每个执行程序的磁盘空间量,使用大小单位后缀(“k”“m”“g”或“t”)指定。执行程序磁盘空间可用于 shuffle 数据和暂存依赖项。必须至少为 250GiB。 如果执行器上选择了 Premium 磁盘层级,则有效大小为 375g、750g、1500g、3000g、6000g 或 9000g。如果选择 Premium 磁盘层级和 16 个执行程序核心,则最小磁盘大小为 750g。 每个核心 100GiB 1024g2t
spark.dataproc.executor.disk.tier 用于执行程序上本地存储和 shuffle 存储的磁盘层。 高级磁盘层级在 IOPS 和吞吐量方面提供更好的性能,但费用更高。如果执行器上选择了 Premium 磁盘层级,则还必须使用 spark.dataproc.executor.compute.tier=premium 选择 Premium 计算层级,并使用 spark.dataproc.executor.disk.size 指定磁盘空间量。

如果选择 Premium 磁盘层级,每个执行器将额外分配 50GiB 的磁盘空间用于系统存储,用户应用无法使用该空间。

standard 标准、高级
spark.executor.instances 要分配的执行程序的初始数量。批处理工作负载开始后,自动扩缩可能会更改活跃执行程序的数量。必须至少为 2,最多为 2000

自动扩缩属性

如需查看可用于配置 Serverless for Apache Spark 自动扩缩功能的 Spark 属性列表,请参阅 Spark 动态分配属性

日志记录属性

属性 说明 默认 示例
spark.log.level 设置后,会替换所有用户定义的日志设置,效果相当于在 Spark 启动时调用 SparkContext.setLogLevel()。有效的日志级别包括:ALLDEBUGERRORFATALINFOOFFTRACEWARN 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 map 倾斜的执行程序,这可以减少因 shuffle 写入倾斜而导致的长时间 shuffle 获取等待时间。 false true
spark.scheduler.shuffleSkew.minFinishedTasks 执行器上完成的 Shuffle Map 任务的最小数量,用于判断是否存在倾斜。 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber 视为倾斜的执行程序数量上限。倾斜的执行器被排除在当前调度轮之外。 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio 将总执行器数视为倾斜的最大比率。倾斜的执行器会被排除在调度之外。 0.05 0.1
spark.scheduler.shuffleSkew.ratio 执行器上已完成的 Shuffle Map 任务的平均倍数,用于将此倍数视为倾斜。 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。对于无服务器交互式会话,请在创建交互式会话/模板时添加此属性