Spark 属性

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

设置 Spark 批处理工作负载属性

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

控制台

  1. 在 Google Cloud 控制台中,前往 Managed Service for Apache Spark 创建批处理页面。

    前往 Managed Service for Apache Spark 的“创建批处理作业”页面

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

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

gcloud

以下是 gcloud CLI 批量提交示例。多个属性之间用英文逗号分隔。

gcloud dataproc batches submit spark \
    --properties=spark.checkpoint.compress=true,spark.driver.cores=8  \
    --region=REGION \
    other args ...

API

在 batches.create 请求中,使用支持的 Spark 属性设置 RuntimeConfig.properties。

支持的 Spark 属性

Managed Service for Apache Spark 支持大多数 Spark 属性,但不支持与 YARN 和 shuffle 相关的 Spark 属性,例如 spark.master=yarn 和 spark.shuffle.service.enabled。如果 Spark 应用代码设置 YARN 或 shuffle 属性,则应用将失败。

运行时环境属性

Managed Service 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(请参阅 Managed Service for Apache Spark 层级)。交互式会话始终在高级 dataproc.tier 上运行。
  • 将此批处理层级属性设置为 standard 会将 Managed Service for Apache Spark 运行时和资源层级属性设置为 standard 层级(请参阅资源分配属性)。
  • 将此批处理层级属性设置为 premium 会将 spark.dataproc.engine 设置为 lightningEngine,并将 spark.dataproc.driver.compute.tier 和 spark.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 层级运行。在 Google Cloud 控制台的创建运行时配置文件页面上创建运行时配置文件(会话模板)时,系统会默认选择高级层级和启用 Lightning Engine 以提升性能(用于设置 spark.dataproc.engine=lightningEngine)。
  • 批处理(标准层级):default
  • 批次(高级层级):lightningEngine
  • 会话数:default
spark.dataproc.lightningEngine.runtime 为批量工作负载或交互式会话选择 Lightning Engine 时要使用的运行时:default 或 native(原生查询执行)。 default

资源分配属性

Managed Service for Apache Spark 支持以下用于配置资源分配的 Spark 属性:

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

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

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

512m,2g
spark.driver.memoryOverhead

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

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

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

驱动程序内存的 10%,但 PySpark 批处理工作负载除外,其默认值为驱动程序内存的 40% 512m,2g
spark.dataproc.driver.compute.tier 要在驱动程序上使用的计算层级。 Premium 计算层级提供更高的单核性能,但费率也更高。 standard 标准版、高级版
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 磁盘空间,用户应用无法使用这些空间。

standard 标准版、高级版
spark.executor.cores 要分配给每个 Spark 执行程序的核心数 (vCPU)。 有效值:4、8、16。 4
spark.executor.memory

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

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

512m,2g
spark.executor.memoryOverhead

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

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

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

执行器内存的 10%,但 PySpark 批处理工作负载除外,其默认值为执行器内存的 40% 512m,2g
spark.dataproc.executor.compute.tier 要在执行器上使用的计算层级。 Premium 计算层级提供更高的单核性能,但费率也更高。 standard 标准版、高级版
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 的磁盘可用空间用于系统存储,用户应用无法使用这些空间。

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

自动扩缩属性

如需查看可用于配置 Managed Service 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 **仅在 2.3 及更早版本的运行时中受支持**。启用此属性可在批处理工作负载失败或取消时运行诊断。如果启用了诊断,则批处理工作负载在完成后会继续使用 计算资源,直到诊断完成。Batch.RuntimeInfo.diagnosticOutputUri API 字段中列出了指向诊断 tar 文件位置的 URI。
dataproc.gcsConnector.version **仅在 2.3 及更早版本的运行时中受支持**。使用此属性可升级到与批处理工作负载的运行时版本安装的版本不同的 Cloud Storage 连接器版本。
dataproc.sparkBqConnector.version **仅在 2.3 及更早版本的运行时中受支持**。使用此属性可升级到与批处理工作负载的运行时版本一起安装的版本不同的 Spark BigQuery 连接器版本(请参阅将 BigQuery 连接器与 Managed Service for Apache Spark 搭配使用)。
dataproc.profiling.enabled **仅在 2.3 及更早版本的运行时中受支持**。将此属性设置为 true,以便为 Managed Service for Apache Spark 工作负载启用性能分析。
dataproc.profiling.name **仅在 2.3 及更早版本的运行时中受支持**:使用此属性可设置用于在 Profiler 服务上创建配置文件的名称。
spark.jars 使用此属性可设置要包含在驱动程序和执行器类路径中的 JAR 的逗号分隔列表
spark.archives 使用此属性可设置要提取到每个执行器的工作目录中的归档文件的逗号分隔列表。支持 .jar、.tar.gz、.tgz 和 .zip。对于无服务器交互式会话,请在创建交互式会话或运行时配置文件(会话模板)时添加此属性。
dataproc.artifacts.remove 使用此属性可移除 Managed Service for Apache Spark 运行时上安装的默认工件。 支持的工件包括 conscrypt、delta-lake、iceberg、rapids 和 spark-bigquery-connector。