本文介绍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管理作业 。