当多个作业在同一队列中同时申请资源时,您可以通过设置作业优先级,保障高优先级作业优先获取资源。本文为您介绍如何为EMR Serverless Spark作业设置优先级。
前提条件
已创建Serverless Spark工作空间。具体操作,请参见创建工作空间。
任务优先级功能仅限白名单队列使用,需提交工单联系Serverless Spark团队开通。
背景信息
当多个作业在同一队列中同时申请资源时,系统按照以下规则分配资源:
优先级排序:优先级高的作业优先申请资源。
资源申请条件:队列空闲资源大于等于Driver所需资源时,作业成功申请资源;资源不足则进入排队等待,不会阻塞其他可满足的作业。
动态资源继承:启用动态资源分配的作业,在运行中申请新增Executor时,继承原作业的优先级。
优先级说明
取值范围:0~9 的整数,数值越大优先级越高。
默认值:未设置优先级时,默认值为 0。
生效对象:
支持自定义设置:批任务、流任务、通过 Gateway 提交的 Batch/Session 任务。
系统默认优先级为 5(不支持自定义):会话资源、Livy Gateway、Kyuubi Gateway。
操作步骤
EMR Serverless Spark支持通过以下四种方式为作业设置优先级:
方式一:通过数据开发设置优先级
在左侧导航栏,选择EMR Serverless > Spark。
在Spark页面,单击目标工作空间名称。
在EMR Serverless Spark页面,单击左侧导航栏中的数据开发。
创建或编辑批任务或流任务。
在任务的Spark配置中,添加如下配置:
spark.emr.serverless.priority=9其中,
9为优先级数值,取值范围为0~9,请根据实际业务需求设置。保存并提交任务。
方式二:通过Gateway提交任务时设置优先级
通过Livy Gateway或Kyuubi Gateway提交任务时,可在Spark配置中添加优先级参数。
Livy Gateway:在提交任务时,于Spark配置中添加:
spark.emr.serverless.priority=8。Kyuubi Gateway:在提交任务时,于Spark配置中添加:
spark.emr.serverless.priority=8。
方式三:通过spark-submit提交任务时设置优先级
在使用spark-submit命令提交任务时,通过--conf参数添加优先级配置,示例如下:
spark-submit \
--master spark://<gateway-endpoint> \
--conf spark.emr.serverless.priority=6 \
--class org.apache.spark.examples.SparkPi \
s3://your-bucket/spark-examples.jar 100方式四:通过工作流设置优先级
批任务节点:继承数据开发中Spark配置的优先级设置值,无需额外配置。
SQL节点/Notebook节点:在节点的Spark配置中添加
spark.emr.serverless.priority=7,然后保存并提交工作流。