本文档介绍了 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 属性。
控制台
- 在 Google Cloud 控制台中,前往 Dataproc 创建批处理页面。 
- 在媒体资源部分中,点击添加媒体资源。 
- 输入受支持的 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=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 Engine)或default引擎。
 | 
 | 
| spark.dataproc.lightningEngine.runtime | 为批量工作负载或交互式会话选择 Lightning Engine 时要使用的运行时: 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 | 驱动程序上要使用的计算层级。 高级计算层级提供更高的每核心性能,但收费也更高。 | standard | 标准、高级 | 
| spark.dataproc.driver.disk.size | 分配给驱动程序的磁盘空间量,使用大小单位后缀(“k”“m”“g”或“t”)指定。必须至少为 250GiB。
        如果驱动程序上选择了 Premium 磁盘层级,则有效大小为 375g、750g、1500g、3000g、6000g 或 9000g。如果选择 Premium 磁盘层级和 16 个驱动程序核心,则最小磁盘大小为 750g。 | 每个核心 100GiB | 1024g,2t | 
| 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)。
        有效值: 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 | 要在执行器上使用的计算层级。 高级计算层级提供更高的每核心性能,但收费也更高。 | standard | 标准、高级 | 
| spark.dataproc.executor.disk.size | 分配给每个执行程序的磁盘空间量,使用大小单位后缀(“k”“m”“g”或“t”)指定。执行程序磁盘空间可用于 shuffle 数据和暂存依赖项。必须至少为 250GiB。
        如果执行器上选择了 Premium 磁盘层级,则有效大小为 375g、750g、1500g、3000g、6000g 或 9000g。如果选择 Premium 磁盘层级和 16 个执行程序核心,则最小磁盘大小为 750g。 | 每个核心 100GiB | 1024g,2t | 
| 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()。有效的日志级别包括: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 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。对于无服务器交互式会话,请在创建交互式会话/模板时添加此属性 |