本文档介绍了 Spark 属性及其设置方法。Dataproc Serverless 使用 Spark 属性来确定要分配给批处理工作负载的计算、内存和磁盘资源。这些媒体资源设置可能会影响工作负载配额消耗和费用。如需了解详情,请参阅 Dataproc Serverless 配额和 Dataproc Serverless 价格。
设置 Spark 批处理工作负载属性
使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API 提交 Dataproc Serverless 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 请求中,使用支持的 Spark 属性设置 RuntimeConfig.properties。
支持的 Spark 属性
Dataproc Serverless for Spark 支持大多数 Spark 属性,但它不支持与 YARN 和 shuffle 相关的 Spark 属性,例如 spark.master=yarn
和 spark.shuffle.service.enabled
。如果 Spark 应用代码设置 YARN 或 shuffle 属性,则应用将失败。
运行时环境属性
Dataproc Serverless for Spark 支持以下自定义 Spark 属性来配置运行时环境:
属性 | 说明 |
---|---|
spark.dataproc.driverEnv.EnvironmentVariableName |
将 EnvironmentVariableName 添加到驱动程序进程。您可以指定多个环境变量。 |
资源分配属性
Dataproc Serverless for 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 。如果在驱动程序上选择了“高级”磁盘层级,则有效大小为 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 指定磁盘空间大小。如果选择了“高级”磁盘层级,驱动程序会为系统存储空间额外分配 50 GiB 的磁盘空间,该空间无法供用户应用使用。 | 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。如果选择了“高级”磁盘层级和 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 指定磁盘空间大小。
如果选择“高级”磁盘层级,系统会为每个执行器额外分配 50 GiB 的磁盘空间用于系统存储,用户应用无法使用此存储空间。 | standard | 标准、高级 |
spark.executor.instances |
要分配的执行程序的初始数量。在批处理工作负载开始运行后,自动扩缩可能会更改活跃执行程序的数量。必须至少为 2 ,且不超过 2000 。 |
自动扩缩属性
如需查看可用于配置 Dataproc Serverless 自动扩缩的 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 |
在调度时排除分块映射偏斜的执行器,这可以缩短因分块写入偏斜而导致的长时间分块提取等待时间。 | 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 连接器与 Dataproc Serverless for Spark 搭配使用)。 |
dataproc.profiling.enabled |
将此属性设置为 true 可为 Dataproc Serverless 工作负载启用性能分析。 |
dataproc.profiling.name |
使用此属性设置用于在 Profiler 服务上创建配置文件的名称。 |