本文介绍Lindorm计算引擎的常用Spark配置项和配置方法。
Spark配置项
Lindorm计算引擎支持自定义常用的Spark配置项,包括资源配置项、执行配置项和监控配置项。
受限配置项
spark.master和spark.submit.deployMode为系统参数,不支持自定义。
配置项 | 说明 |
spark.master | 集群管理服务地址。 |
spark.submit.deployMode | Driver程序的部署方式。 |
资源配置项
Lindorm计算引擎基于弹性资源池提供服务,计费方式为按量付费,且在开通计算引擎后,弹性资源的上限默认为无限制。如果您需要修改弹性资源上限,请参见变配计算引擎资源。
您向Lindorm计算引擎提交的每一个作业(JDBC作业、JAR作业、Python作业等),都可以自定义资源配置项,包括资源规格配置项和资源规模配置项。
资源规格
基础资源配置项
配置项 | 说明 | 默认值 |
spark.driver.memory | Driver堆内内存大小。单位为MB。 | 8192M |
spark.driver.memoryOverhead | Driver堆外内存大小。单位为MB。 | 8192M |
spark.kubernetes.driver.disk.size | Driver本地磁盘大小。单位为GB。 | 50 |
spark.executor.cores | 单Executor提供的计算槽位数量。 | 4 |
spark.executor.memory | 单Executor堆内内存大小。单位为MB。 | 8192M |
spark.executor.memoryOverhead | 单Executor堆外内存大小。单位为MB。 | 8192M |
spark.kubernetes.executor.disk.size | 单Executor本地磁盘大小。单位为GB。 | 50 |
高级资源配置项
配置项 | 说明 | 默认值 |
spark.{driver/executor}.resourceTag | 资源规格配置组。支持的规格:
| 无 |
spark.kubernetes.{driver/executor}.ecsModelPreference | 计算节点机型配置,与 计算引擎会按配置顺序申请对应的机型,当配置的全部机型都没有库存时,会回退到按资源规格随机申请有库存机型。 | 无 |
spark.kubernetes.{driver/executor}.annotation.k8s.aliyun.com/eci-use-specs | 指定GPU的规格与型号。规格列表的详细信息,请参见GPU实例规格。 | ecs.gn7i-c8g1.2xlarge |
spark.{driver/executor}.resource.gpu.vendor | 指定GPU的生产厂商。 说明 该参数需要与指定的GPU规格与型号对应。 | nvidia.com |
spark.{driver/executor}.resource.gpu.amount | GPU个数。 说明 GPU个数固定为1。 | 1 |
spark.{driver/executor}.resource.gpu.discoveryScript | 脚本文件所在的路径。 说明 在启动Spark driver/executor时会使用该脚本查询并绑定GPU资源,且脚本文件所在的路径固定为 | /opt/spark/examples/src/main/scripts/getGpusResources.sh |
spark.kubernetes.executor.annotation.k8s.aliyun.com/eci-use-specs | 指定Executor实例类型,扩充Executor数据盘空间,避免产生数据盘空间不足的问题。 支持的实例类型如下:
说明 | 无 |
资源规模
配置项 | 说明 | 默认值 |
spark.executor.instances | 作业申请的Executor数量。 | 2 |
spark.dynamicAllocation.enabled | 是否开启动态资源分配。取值:
开启动态资源分配后,计算引擎将根据任务工作负载,实时进行Executor资源申请与释放。 | true |
spark.dynamicAllocation.minExecutors | 动态资源分配时,Executor的最小数量。 | 0 |
spark.dynamicAllocation.maxExecutors | 动态资源分配时,Executor的最大数量。 说明 Executor的最大数量与定义的Task并发量相同。 | Infinity |
spark.dynamicAllocation.executorIdleTimeout | 动态资源分配时,若Executor空闲时间超过该值,Executor资源将被释放。单位为秒(s)。 | 600s |
执行配置项
配置项 | 说明 | 默认值 |
spark.speculation | 是否开启推测执行功能 。取值:
如果某个Task任务执行较慢,Driver将重新提交Task任务,避免在执行时出现长尾现象。 说明 长尾现象即某些Task任务执行的时间远大于其他Task任务的执行时间。 | true |
spark.task.maxFailures | Task任务失败次数限制。当某一个Task任务失败次数超过该值时,将导致整个作业执行失败。 | 4 |
spark.dfsLog.executor.enabled | 是否将Executor日志保存至DFS。取值:
在Lindorm计算引擎服务规模较大的情况下,将该配置项的取值设置为false,可以避免日志流增大导致DFS压力过大。 | true |
spark.jars | 提交任务依赖的JAR包路径(OSS路径或HDFS路径)。 如果为OSS路径,您需要配置对应的配置项,包括:
重要 通过JDBC方式连接计算引擎时,JAR包仅支持上传至HDFS。 | 无 |
spark.hadoop.fs.oss.endpoint | OSS的Endpoint。获取Endpoint,请参见公共云下OSS Region和Endpoint对照表。 | 无 |
spark.hadoop.fs.oss.accessKeyId | 阿里云账号或RAM用户的AccessKey ID。 如何获取AccessKey ID和AccessKey Secret,请参见获取AccessKey。 | 无 |
spark.hadoop.fs.oss.accessKeySecret | 阿里云账号或RAM用户的AccessKey Secret。 如何获取AccessKey ID和AccessKey Secret,请参见获取AccessKey。 | 无 |
spark.hadoop.fs.oss.impl | 访问OSS的类。 固定值为: | 无 |
spark.default.parallelism | 非SQL任务默认的并发度,其中包括数据源的并发度和Shuffle并发度。 | 无 |
spark.sql.shuffle.partitions | SQL任务默认的Shuffle并发度。 | 200 |
监控配置项
Lindorm计算引擎支持通过自定义监控配置项,在作业日志中打印Driver和Executor的系统状态信息监控实例运行状态。
配置项 | 说明 | 默认值 |
spark.monitor.cmd | 作业监控命令组。多个监控命令用半角分号(;)分隔。监控方式为定时串行执行所配置的多个监控命令,将执行结果打印到作业日志中,记录系统状态信息。 监控命令示例:
配置语句:
重要 通过Beeline或JDBC提交作业时不支持修改该配置项。 | 无 |
spark.monitor.interval | 监控命令组执行的时间间隔。单位为秒(s)。 spark.monitor.cmd所配置的监控命令组执行的时间间隔。 | 60 |
spark.monitor.timeout | 监控命令执行的超时时间,单位为秒(s)。 如果spark.monitor.cmd所配置的监控命令组中,某一个监控命令执行时间超过该值,则直接跳过该监控命令,继续执行其后面的监控命令,避免打印监控信息时出现阻塞。 | 2 |
开源Spark配置项
开源Spark配置项的用法,请参见Spark Configuration。
配置方法
向Lindorm计算引擎提交作业时,可以自定义资源配置项,不同的提交方式配置方法不同。
Beeline
您可以在Beeline命令行所在的Spark软件包中,修改配置文件conf/beeline.conf
。更多信息,请参见快速入门。
配置文件示例如下:
# Endpoint of Lindorm Compute Engine, e.g. jdbc:hive2://123.456.XX.XX:10009/;?token=bb8a15-jaksdj-sdfjsd-ak****
endpoint=jdbc:hive2://ld-bp13ez23egd123****-proxy-ldps-pub.lindorm.aliyuncs.com:10009/;?token=jfjwi2453-fe39-cmkfe-afc9-01eek2j5****
# Username for connection, by default root.
user=root
# Password for connection, by default root.
password=root
# Whether to share Spark resource between different sessions, by default true.
shareResource=false
# Normal Spark configurations
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.minExecutors=3
JDBC
通过JDBC连接串设置配置项,JDBC连接地址请参见JDBC开发实践。
例如:通过JDBC连接串设置Spark的Shuffle默认分区数为2,Executor使用的内存量为8 GB。
jdbc:hive2://${host}:${port}/;?token=${token};spark.executor.memory=8g;spark.sql.shuffle.partitions=2
JAR
通过Lindorm控制台提交JAR作业可以根据作业内容模板,配置作业参数。具体操作,请参见通过控制台管理作业。
通过DMS提交JAR作业时,可以在作业配置区域配置运行作业的自定义参数。具体操作,请参见通过DMS管理作业。