文档

作业配置说明

更新时间:

本文介绍Lindorm计算引擎的常用Spark配置项和配置方法。

Spark配置项

Lindorm计算引擎支持自定义常用的Spark配置项,包括资源配置项、执行配置项和监控配置项。

受限配置项

spark.masterspark.submit.deployMode为系统参数,不支持自定义。

配置项

说明

spark.master

集群管理服务地址。

spark.submit.deployMode

Driver程序的部署方式。

资源配置项

Lindorm计算引擎基于弹性资源池提供服务,计费方式为按量付费,且在开通计算引擎后,弹性资源的上限默认为无限制。如果您需要修改弹性资源上限,请参见变配计算引擎资源

您向Lindorm计算引擎提交的每一个作业(JDBC作业、JAR作业、Python作业等),都可以自定义资源配置项,包括资源规格配置项和资源规模配置项。

表 2. 资源规格

配置项

说明

默认值

spark.driver.memory

Driver堆内内存大小。单位为MB。

11264m

spark.driver.memoryOverhead

Driver堆外内存大小。单位为MB。

5120m

spark.kubernetes.driver.disk.size

Driver本地磁盘大小。单位为GB。

20

spark.executor.cores

单Executor提供的计算槽位数量。

4

spark.executor.memory

单Executor堆内内存大小。单位为MB。

11264m

spark.executor.memoryOverhead

单Executor堆外内存大小。单位为MB。

5120m

spark.kubernetes.executor.disk.size

单Executor本地磁盘大小。单位为GB。

40

spark.executor.resourceTag

Lindorm计算引擎支持通过该配置项指定具体的内存资源配置,从而简化Executor资源规格配置。

重要

该参数不能与spark.executor.coresspark.executor.memoryspark.executor.memoryOverhead同时配置,否则会报错。

配置值和说明如下:

  • large-mem:适用于内存密集型作业,Executor规格配置如下:

    spark.executor.cores=2

    spark.executor.memory=11264m

    spark.executor.memoryOverhead=5120m

  • xlarge-mem:适用于内存超密集型作业,Executor规格配置如下:

    spark.executor.cores=1

    spark.executor.memory=11264m

    spark.executor.memoryOverhead=5120m

  • large-memory-overhead:适用于堆外内存开销较大的作业(例如Spark Python作业),Executor规格配置如下:

    spark.executor.cores=2

    spark.executor.memory=8192m

    spark.executor.memoryOverhead=8192m

  • xlarge-memory-overhead:适用于堆外内存开销超大的作业(例如Spark Python作业),Executor规格配置如下:

    spark.executor.cores=1

    spark.executor.memory=8192m

    spark.executor.memoryOverhead=8192m

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

/opt/spark/examples/src/main/scripts/getGpusResources.sh

spark.kubernetes.executor.annotation.k8s.aliyun.com/eci-use-specs

指定Executor实例类型,扩充Executor数据盘空间,避免产生数据盘空间不足的问题。

支持的实例类型如下:

  • ecs.d1ne.2xlarge:8核32 GB

  • ecs.d1ne.4xlarge:16核64 GB

  • ecs.d1ne.6xlarge:24核96 GB

  • ecs.d1ne.8xlarge:32核128 GB

  • ecs.d1ne.14xlarge:56核224 GB

    说明
    • 需按Executor资源需求配置对应的Executor实例类型。

    • 需同时配置以下参数

      • spark.kubernetes.executor.volumes.emptyDir.spark-local-dir-1.mount.path=/var

      • spark.kubernetes.executor.volumes.emptyDir.spark-local-dir-1.options.medium=LocalRaid0

    • 可能会存在对应Executor实例类型库存不足的情况,配置后如有报错请联系Lindorm技术支持(钉钉号:s0s3eg3)。

表 3. 资源规模

配置项

说明

默认值

spark.executor.instances

作业申请的Executor数量。

2

spark.dynamicAllocation.enabled

是否开启动态资源分配。取值:

  • true:开启。

  • false:不开启。

开启动态资源分配后,计算引擎将根据任务工作负载,实时进行Executor资源申请与释放。

true

spark.dynamicAllocation.minExecutors

动态资源分配时,Executor的最小数量。

0

spark.dynamicAllocation.maxExecutors

动态资源分配时,Executor的最大数量。

说明

Executor的最大数量与定义的Task并发量相同。

Infinity

spark.dynamicAllocation.executorIdleTimeout

动态资源分配时,若Executor空闲时间超过该值,Executor资源将被释放。单位为秒(s)。

600s

执行配置项

配置项

说明

默认值

spark.speculation

是否开启推测执行功能 。取值:

  • true:开启。

  • false:不开启。

如果某个Task任务执行较慢,Driver将重新提交Task任务,避免在执行时出现长尾现象。

说明

长尾现象即某些Task任务执行的时间远大于其他Task任务的执行时间。

true

spark.task.maxFailures

Task任务失败次数限制。当某一个Task任务失败次数超过该值时,将导致整个作业执行失败。

4

spark.dfsLog.executor.enabled

是否将Executor日志保存至DFS。取值:

  • true:保存。

  • false:不保存。

在Lindorm计算引擎服务规模较大的情况下,将该配置项的取值设置为false,可以避免日志流增大导致DFS压力过大。

true

spark.jars

提交任务依赖的JAR包路径(OSS路径或HDFS路径)。

如果为OSS路径,您需要配置对应的配置项,包括:spark.hadoop.fs.oss.endpointspark.hadoop.fs.oss.accessKeyIdspark.hadoop.fs.oss.accessKeySecretspark.hadoop.fs.oss.impl

重要

通过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的类。

固定值为:org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem

spark.default.parallelism

非SQL任务默认的并发度,其中包括数据源的并发度和Shuffle并发度。

spark.sql.shuffle.partitions

SQL任务默认的Shuffle并发度。

200

监控配置项

Lindorm计算引擎支持通过自定义监控配置项,在作业日志中打印Driver和Executor的系统状态信息监控实例运行状态。

配置项

说明

默认值

spark.monitor.cmd

作业监控命令组。多个监控命令用半角分号(;)分隔。监控方式为定时串行执行所配置的多个监控命令,将执行结果打印到作业日志中,记录系统状态信息。

监控命令示例:

  • 系统整体状态信息:top -b -n 1、vmstat。

  • 内存状态信息:free -m。

  • IO状态信息:iostat -d -x -c -k。

  • 硬盘状态信息:df -h。

  • 网络状态信息:sar -n DEV 1 1、netstat。

配置语句:

  • 配置单个监控命令:

    "spark.monitor.cmd": "top -b -n 1"
  • 配置多个监控命令:

"spark.monitor.cmd": "top -b -n 1; vmstat; free -m; iostat -d -x -c -k; df -h; sar -n DEV 1 1; netstat"
重要

通过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管理作业

Python

  • 通过Lindorm控制台提交Python作业可以根据作业内容模板,配置作业参数。具体操作,请参见通过控制台管理作业

  • 通过DMS提交Python作业时,可以在作业配置区域配置运行作业的自定义参数。具体操作,请参见通过DMS管理作业

  • 本页导读 (1)
文档反馈