通用配置

更新时间:
复制为 MD 格式

本文介绍Spark客户端各个版本的通用参数配置。

MaxCompute账号参数配置

参数

说明

spark.hadoop.odps.project.name

MaxCompute项目名称。

若使用DataWorks提交任务,使用默认值即可,无需配置。

spark.hadoop.odps.access.id

具备目标MaxCompute项目访问权限的AccessKey ID,可以进入AccessKey管理页面获取AccessKey ID。

若使用DataWorks提交任务,使用默认值即可,无需配置。

spark.hadoop.odps.access.key

AccessKey ID对应的AccessKey Secret。

若使用DataWorks提交任务,使用默认值即可,无需配置。

spark.hadoop.odps.access.security.token

MaxCompute项目STS Token。

若使用DataWorks提交任务,使用默认值即可,无需配置。

spark.hadoop.odps.end.point

  • MaxCompute所属Region独享的公网EndpointVPC Endpoint。设置为公网 Endpoint 或 VPC Endpoint取决于 Spark 客户端所处网络环境。Dataworks 提交任务使用默认值即可,无需配置。

  • 例如,杭州VPC Endpointhttps://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api

spark.hadoop.odps.runtime.end.point

MaxCompute所属Region云产品互联 Endpoint

例如,杭州云产品互联Endpointhttps://service.cn-hangzhou-intranet.maxcompute.aliyun-inc.com/api

MaxCompute Spark作业提交、版本及日志等配置

参数

说明

spark.hadoop.odps.kube.mode

  • 默认值 false

  • 该配置参数表明是否使用 Kubernetes(k8s)模式提交作业,目前MaxCompute Spark已经全面升级为kube模式,旧版cupid模式将下线。

  • 新用户使用时请确保开启该配置。

spark.hadoop.odps.cupid.data.proxy.enable

  • 默认值 false

  • 该配置参数表明在读写数据的接口是否使用MaxStorage。

  • 不开启可能会导致无法使用 kube 模式,确保使用 kube 模式时开启该选项。

spark.hadoop.odps.cupid.fuxi.shuffle.enable

  • 默认值 false

  • 该配置参数表明是否在 shuffle 时使用 Fuxi Shuffle Service,防止使用本地盘导致存储空间溢出。

  • 作业规模较大或者遇到存储满盘的问题建议开启。

spark.hadoop.odps.spark.version

  • 提交Spark任务所用的Spark版本,版本可参见Spark发布列表。例如spark-3.1.1-odps0.35.0

  • 当通过Spark客户端提交任务时,需要同时配置spark.hadoop.odps.spark.libs.public.enabletrue

spark.hadoop.odps.spark.libs.public.enable

  • 默认值 false。设置为true后,可以免上传Spark libs,直接从服务端拉取,加速启动。

  • 需同时配置spark.hadoop.odps.spark.version指定版本后才可生效。

spark.eventLog.enabled

  • 默认值 false。该配置参数表明开启eventLog以便查看SparkUI history。

  • 建议开启以便排查问题,kube 模式下需要配合设置spark.eventLog.dir

spark.eventLog.dir

  • 默认值 /tmp/spark-events/ 或 /workdir/eventlog(视版本而定)。

  • 该配置参数表明eventLog的存储位置,如果参数错误,则无法上传eventLog以查看history。

  • kube 模式下推荐手动设置为/workdir/eventlog/

Spark资源申请参数配置

参数

说明

spark.executor.instances

默认值1。Spark 应用程序在集群中启动的Executor进程总数。

spark.executor.cores

默认值1。每个Executor进程可使用的CPU核心数。

spark.executor.memory

默认值 2g。每个Executor进程的内存总量(包括堆内和堆外内存)。

spark.driver.cores

默认值 1。Driver进程使用的CPU核心数。

spark.driver.memory

默认值 2g。Driver进程的内存总量。

spark.executor.memoryOverhead

  • 默认值 参考社区配置。当堆外内存使用比较多时建议提高此值避免整体内存超出被Kill。

  • 单个Executor的内存总量是spark.executor.memory+spark.executor.memoryOverhead

spark.driver.memoryOverhead

  • 默认值 参考社区配置。当堆外内存使用比较多时建议提高此值避免整体内存超出被Kill。

  • Driver的内存总量是spark.driver.memory+spark.driver.memoryOverhead

spark.hadoop.odps.cupid.disk.driver.device_size

  • 默认值 20g。本地网盘大小,当出现No space left on device时可适当调大该值,最大支持100g。

  • 必须配置在spark-defaults.conf文件或者DataWorks的配置项中才可生效,不能配置在代码中。

MaxCompute读写相关配置

重要

以下以spark.sql.catalog.odps开头的配置仅在 3.x 版本中才可以使用。

参数

说明

spark.sql.catalog.odps.tableReadProvider

  • 默认值 v1

  • 使用Local模式时需要设置为tunnel

spark.sql.catalog.odps.tableWriteProvider

  • 默认值 v1

  • 使用Local模式时需要设置为tunnel

spark.sql.catalog.odps.metaCacheSize

  • 默认值 100

  • 元数据缓存的最大条数(包括project、schema、table的元数据缓存),用于加速读写,不建议改动。

spark.sql.catalog.odps.metaCacheExpireSeconds

  • 默认值 30

  • 单位为秒。元数据缓存过期时间,用于加速读写,不推荐增大(除非涉及的表使用很频繁且不变化,否则容易导致读到脏数据)。

spark.sql.catalog.odps.viewCacheExpireSeconds

  • 默认值 3600

  • 单位为秒。视图元数据缓存过期时间,不推荐修改。

spark.sql.catalog.odps.enableVectorizedReader

  • 默认值 true

  • 表示是否使用向量化读,不推荐修改。

spark.sql.catalog.odps.enableVectorizedWriter

  • 默认值 true

  • 表示是否使用向量化写,不推荐修改。

spark.sql.catalog.odps.columnarReaderBatchSize

  • 默认值 4096

  • 表示读取时一个批次的数据行数大小。

spark.sql.catalog.odps.columnarWriterBatchSize

  • 默认值 4096

  • 表示写入时一个批次的数据行数大小。

spark.sql.catalog.odps.splitParallelism

  • 默认值 -1

  • 表示底层存储分割时并行度大小,必须大于0才生效。

  • 不要轻易设置该选项,当前默认使用splitByRowOffsetsplitByByteSize,此时计算出的分片大小更合适。

spark.sql.catalog.odps.splitSizeInMB

  • 默认值 256

  • 单位为 MB。表示每个分片大小,可以通过调小该值来增大读取的并发度,反之亦然。

spark.sql.catalog.odps.enableExternalProject

  • 默认值 false

  • 是否开启支持外部项目。

spark.sql.catalog.odps.enableExternalTable

  • 默认值 false

  • 是否开启支持外部表。

spark.sql.catalog.odps.tableCompressionCodec

  • 默认值 none

  • 对表的压缩算法,默认为空,目前支持lz4_framezstd

spark.sql.catalog.odps.enableNamespaceSchema

  • 默认值 false

  • 是否支持MaxCompute Schema级语法开关。

spark.sql.catalog.odps.defaultSchema

  • 默认值 default

  • 默认的schemaName,建议不要修改。

spark.sql.catalog.odps.writerChunkSize

  • 默认值 4194304

  • 写入时chunk大小,单位为字节,默认为 4MB。

spark.sql.catalog.odps.writerMaxRetires

  • 默认值 10

  • 写入失败后的重试次数。

spark.sql.catalog.odps.writerRetrySleepIntervalMs

  • 默认值 10000

  • 写入失败后重试的间隔时间,单位为毫秒。

spark.sql.catalog.odps.writerBlocks

  • 默认值 20000

  • 写入的最大block数量。

spark.sql.catalog.odps.splitSessionParallelismEnable

  • 默认值 true

  • 是否在分区维度并行得到读取数据。

spark.sql.catalog.odps.splitSessionParallelism

  • 默认值 1

  • 在分区维度得到读取数据的并行线程数。

  • 通常该参数的配置不会成为性能瓶颈,除非裁剪后的分区数量仍然非常多,此时可以考虑调整该参数。

spark.sql.catalog.odps.splitMaxFileNum

  • 默认值 0

  • 底层单个分片的文件数量最大值,默认为0表示不设限。

  • 如果小文件过多导致单个 split 读取时间过长可以设置该参数来增多 split 数量以调动更多 reader 读取提高速度。

spark.sql.catalog.odps.splitMaxWaitTime

  • 默认值 15

  • 单位为分钟。表示分片的等待时间,如果分片时间过长可以调大该值。

spark.sql.catalog.odps.enableFilterPushDown

  • 默认值 false

  • 是否在Spark层面开启谓词下推。

spark.sql.catalog.odps.enableDeltaInsertDeduplicate

  • 默认值 false

  • 是否在分区内去重,如果是 transactional 且 overwrite 写入默认会去重。

spark.sql.catalog.odps.maxFieldSizeInMB

  • 默认值 -1

  • 单位为 MB。表示VARCHAR/CHAR/STRING/BINARY类型写入的最大大小,默认的 -1 表示8MB。

  • 设置该参数时,内置的上限为项目级参数odps.sql.cfile2.field.maxsize大小。

spark.sql.catalog.odps.splitReaderNum

  • 该参数仅在Spark 版本>=3.4 时开启,低版本无效。

  • 默认值 1

  • 读取并发数量,当 CPU 不是性能瓶颈时可以通过设置该选项来加快读取速度(不推荐超过 4,实际请以接近 CPU 瓶颈的并发数作为上限,继续上升反而会导致性能下降)

  • 该配置参数无论是否开启asnycReadbatchReused都会生效。

spark.sql.catalog.odps.enableBatchReused

  • 该参数仅在Spark 版本>=3.4 时开启,低版本无效。

  • 默认值 true

  • 表示是否复用 batch,用于减少读数据时的内存使用量。如果设置为false建议开启异步读,通过空间换时间的策略来加快读取速度,但是需要注意内存容量大小。

  • 如果设置asyncReadreadNum1时会忽略该参数并强行不复用 batch 以实现类似bufferRead的效果。

spark.sql.catalog.odps.enableAsyncRead

  • 该参数仅在Spark 版本>=3.4 时开启,低版本无效。

  • 默认值 false

  • 开启异步读,通过空间换时间的策略加快读取速度,需要注意内存容量大小。

  • 建议配合readerNumbatchReused参数使用以达到读取效率最大化,详情参考asyncQueueSize参数配置。

spark.sql.catalog.odps.asyncQueueSize

  • 该参数仅在Spark 版本>=3.4 时开启,低版本无效。

  • 默认值 8

  • 异步读时的 buffer 大小,需要注意内存容量大小。

  • 如果开启异步读并且设置batchReused=false时,该参数即为实际队列大小。确保queueSize >= readerNum,否则有可能导致效率无法拉满。

  • 如果开启异步读并且设置batchReused=true,实际队列大小为readerNum,此时如果想reuseBatch切记不要设置readNum=1

spark.sql.catalog.odps.enhanceWriteCheck

  • 该参数仅在Spark 版本>=3.4 时开启,低版本无效。

  • 默认值 false

  • 是否在写入的时候开启正确性检查。

spark.sql.catalog.odps.dynamicPartitionLimit

  • 该参数仅在Spark 版本>=3.4 时开启,低版本无效。

  • 默认值 512

  • 写入时允许创建的动态分区数量上限。

spark.sql.catalog.odps.streamingWriteLimit

  • 该参数仅在Spark 版本>=3.4 时开启,低版本无效。

  • 默认值 60

  • 单位为秒,流式写入时创建writeSession的时间间隔限流,默认表示 60s 一次,下限为 30s 一次。

MaxCompute数据互通配置

spark.hadoop.odps.cupid.resources

该配置项必须要配置在spark-default.conf中或DataWorks的配置项中才能生效,不能写在代码中。

  • 参数说明

    指定任务运行所需要的MaxCompute资源。格式为<projectname>.<resourcename>,可指定多个,通过半角逗号(,)分隔。

    指定的资源将被下载到DriverExecutor的当前工作目录(/workdir),资源下载到工作目录后默认的名字是<projectname>.<resourcename>。压缩包资源会被自动解压,顶层目录名字与原压缩包名字保持一致。例如资源名为examples.tar.gz且未重命名,其展开路径为/workdir/examples.tar.gz/sub/...。如果重命名为examples,则展开路径为/workdir/examples/sub/...,具体路径取决于包名字和包内部的目录结构。

  • 配置示例spark.hadoop.odps.cupid.resources = public.python-python-2.7-ucs4.zip,public.myjar.jar

  • 文件重命名:配置时通过<projectname>.<resourcename>:<newresourcename>方式重命名。

  • 重命名示例spark.hadoop.odps.cupid.resources = public.myjar.jar:myjar.jar

MaxCompute其他配置

参数

说明

spark.hadoop.odps.cupid.eni.enable & spark.hadoop.odps.cupid.eni.info

用于配置 VPC,详细内容请参考访问阿里云VPC

spark.hadoop.odps.cupid.trusted.services.access.list

无默认值。如果在Spark集群模式下,访问云产品互联站点网络不通,请配置该参数(可以参考访问阿里云OSS)。

spark.hadoop.odps.cupid.smartnat.enable

  • 默认值 false

  • 开启以用于访问公网。

spark.hadoop.odps.cupid.internet.access.list

  • 默认值 

  • 访问公网开关开启后,需要设置对应的白名单才可以访问(可以参考访问公网)。

spark.hadoop.odps.spark.alinux3.enabled

  • 默认值 false

  • 集群模式下开启后使用 alinux3 base 镜像,使用 Python 3.11 版本。

spark.hadoop.odps.native.engine.enable

  • 默认值 false

  • 集群模式下使用 Native Engine(Gluten) 加速计算,Native Engine 默认使用 alinux3 base 镜像。

spark.hadoop.odps.spark.metrics.enable

  • 默认值 false

  • 是否在Spark内部采集指标数据,开启后指标数据更加准确。