如何管理应用级别的资源和任务优先级
对于业务规模较大的应用而言,调度的稳定性和核心任务的时效性是至关重要的。本文介绍如何管理应用级别的资源和任务优先级。
背景信息
一些第三方的资源管理系统(例如Mesos和Yarn),能够实现CPU和内存级别的资源管控,而您使用自己的Worker通过客户端接入SchedulerX,所以SchedulerX作为通用的任务调度平台,无法实现CPU和内存级别的管控,也无法通过第三方的资源管理系统进行管控,实现的是任务实例数量和优先级的管控。
应用场景
应用级别的资管和任务优先级管理主要适用于业务、数据规模较大的调度场景。
例如,一个数据平台的应用,每天夜里会执行成千上万的报表,如果没有资源管理,应用可能会因为超负荷而发生故障。同时,一些核心报表也可能会有极强的时效性,必须在某个时间前生成,会对任务的优先级有强烈的需求。SchedulerX提供了资源管理和任务优先级的功能。
资源管理
资源管理即管理应用的任务实例数量,例如在创建应用时,为该应用打开了流控开关,并将任务实例并发数设置为1。再在该应用下创建3个任务,A、B和C,每个任务运行一次,则任务A运行中,而任务B和C在池子中等待运行,而不会被丢弃。
任务优先级管理
任务优先级是应用级别的,即优先级仅在单应用内生效,不影响其它应用的任务。同一个应用下,同时运行的优先级高的任务会被优先执行。
说明一个应用包含多个实例,不同优先级的任务被调度到不同实例执行,可能导致低优先级任务被优先执行。SchedulerX通过可抢占的优先级队列规避了这种可能性,并保证同时在池子中等待的高优先级任务被优先执行。更多信息,请参见可抢占的优先级队列。
管理应用的任务实例资源
- 登录分布式任务调度平台。
- 在顶部菜单栏选择地域。
在左侧导航栏单击应用管理。
在应用管理页面选择目标命名空间,然后单击创建应用。
在创建应用面板,单击高级配置,然后打开流控开关,并设置任务实例并发数。
任务实例并发数即应用级别的任务队列,超过并发数的任务实例不会被丢弃,而是放到池子中等待执行。
配置项
描述
默认值
应用名
自定义设置应用名称。
无
应用ID
应用ID为应用接入的GroupID,保证同一个命名空间下唯一,否则将创建失败,可以和应用名一致。
无
描述
对应用的描述。
无
应用类型
普通应用:非K8s部署的应用,或者对K8s任务没有需求。
K8s应用:应用通过K8s部署,并且有需求要使用K8s任务。
普通应用
版本
根据需求选择版本。更多信息,请参见产品版本对比。
专业版
load5
不能超过客户端机器CPU可用核数
0
内存使用率
表示近5分钟进程内存平均使用率不能大于该阈值,否则判断客户端机器繁忙。
90%
磁盘使用率
表示磁盘使用率不能大于该值,否则判断客户端机器不健康,状态繁忙。
95%
是否触发繁忙机器
机器繁忙时是否继续触发客户端执行。
打开
高级配置
任务最大数量
一个分组最多支持的Job数量。
1000
自动扩容
选择是否自动扩容。开启时,需要设置全局任务数。
关闭
流控
选择是否流控。开启时,需要设置任务实例并发数。
关闭
管理应用的任务优先级
- 登录分布式任务调度平台。
- 在顶部菜单栏选择地域。
- 在左侧导航栏选择任务管理。
- 在任务管理页面,选择目标命名空间,单击创建任务。
在创建任务面板的基本配置配置向导页,设置优先级。
创建任务的其它参数及后续步骤,请参见创建调度任务。
配置项
描述
任务名
任务名称。
描述
任务描述,尽量简洁地描述业务,便于后续搜索。
应用ID
任务所属分组。可以在下拉列表中选择。
任务类型
指任务所实现的语言,当前支持Java、Shell、Python、Go、http、Node.js、xxljob和DataWorks类型,其中Shell、Python和Go会弹出编辑框,在编辑框中编写任务脚本。
执行模式
执行模式,这里特指任务执行的模式,当前支持以下模式。
单机运行:随机选择一台机器执行。
广播运行:所有机器同时执行并等待全部结束。
可视化MapReduce:Map模型,子任务300以下,有子任务列表。
专业版可支持至1,000以下,且支持业务关键字查询。
内存MapReduce:Map模型,子任务执行信息采用内存存储,速度快,子任务50,000以下,无子任务列表。
磁盘MapReduce:Map模型,子任务执行信息采用磁盘文件存储,吞吐量大,子任务1,000,000以下,无子任务列表。
分片运行:类似 Elastic-job模型,配置分片参数,可以将分片平均分给多个客户端执行。支持多语言版本。
说明当选择了不同的执行模式后,高级设置中的参数会随之变化。
优先级
任务的优先级,高优先级任务会优先执行。
任务参数
任意字符串,可以在运行时通过上下文获取。
高级配置
任务失败重试次数
默认值:0。
任务失败重试间隔
默认值:30s。
任务并发数
同一个Job同一时间running的实例个数。
清理策略
任务执行历史记录的清理策略。
保留记录数
任务历史执行记录的保留记录数。
可抢占的优先级队列
一个应用包含多个实例,不同优先级的任务被调度到不同实例执行,可能导致低优先级任务被优先执行。SchedulerX通过可抢占的优先级队列规避了这种可能性,并保证同时在池子中等待的高优先级任务被优先执行。
创建一个示例应用,并为该应用打开流控开关,并设置任务实例并发数为1,请参见管理应用的任务优先级。
为该应用创建3个任务,优先级分别设置为高、中、低。请参见管理应用的任务优先级。
在该应用的任务管理页面依次在中优先级任务、低优先级任务和高优先级任务的操作列,单击运行一次。
观察执行结果。
由于中优先级任务运行的时候,队列中是空的,所以中优先级直接被执行。
中优先级任务执行完成后,高优先级任务会抢占低优先级任务的位置被优先执行。