调度配置的使用(以阿里云Datawroks/Easy Data为例)
1.背景
最近算法团队反馈历史离线推送算法平台任务长期未启动,最早可追溯在3个月前,经排查为上游非高优任务运行失败且没人处理,任务为自依赖导致(上游任务失败后导致后续推数任务都未执行)。
所以语兴也想借此课一起聊聊离线任务调度配置,以及每个配置选项用途,该如何配置是正确的,科普项。
2.调度配置板块
调度板块通常在离线任务附近,用于离线任务调度运维配置,例如定时、参数、依赖、重跑等。


3.参数板块
Dataworks/Easy data参数用于日期信息传递,例如30min、1h、前7日等等,只可用于日期信息传递,不能和代码一样进行传参配置(如需设计到传参可通过python3进行传递),大家可根据任务周期进行自我修改。

4.时间属性

4.1实例生成方式
生成的方式分T+1生成/发布后生成
发布后生成:任务重新提交后,时间调度周期可立刻变更影响到线上实例,例如原任务是10min调度,改成5min调度后立刻发布则改变他的实例类型,用的较多(任务即每个离线脚本,实例即任务每次调度运行的记录)。
T+1生成:任务重新提交后,线上实例不受到影响,例如原任务是10min调度,改成5min调度后立刻发布则不更改当日实例。
4.2调度类型
正常调度:任务正常运行,属于默认情况
暂停调度:可以等同于任务冻结,但如果你是小时任务、分钟调度任务,由于实例比较多,如果只冻结任务还是远远不够的,需要把实例也冻结了,因此需要暂停调度实现其他实例的暂停(不等于任务下线)
空跑调度:空跑调度他的核心在于不执行任务,使用的场景例如,开发的一些小时/分钟业务告警如果因中间失败长期未看导致后面实例没跑,这时切换成空跑调度可以迅速把实例恢复到以前,空跑调度本质是执行任务,不执行任务中的代码。

4.3调度周期/调度时间
调度周期通常是天、小时、分钟
调度时间则按照任务执行去配置,这里需要提到一个点,由于核心表和非核心表同时启动,导致资源阻塞,当时段资源打满,因此对于非高优任务可以推迟调度时间重新安排,对于ods任务需要往前提,提前执行,从而做到错峰(需要确保基线上任务链路不要太长)

4.4超时定义
超时定义主要是针对运行时间超长任务进行自动kill,好处在于对于倾斜任务运行超长时间能及时kill掉,但这里要注意如果非基线/低优先级任务很可能抢不到资源去运行,从而导致运行时间过长被kill,可以卡一下时间定到4个小时超时就kill。

4.5失败重跑
对于失败任务语兴这里是建议重跑的,但又不是很建议重跑,重跑的好处在于日常任务oom,失败后可以夜间不用处理,坏处在于例如dqc触发的告警,同时任务运行30min以上,失败后就继续重跑,直到把重跑次数跑完任务失败,任务owner才能收到告警提醒(这时已比较晚),所以对于重跑次数建议定到1次,间隔3分钟即可

5.任务依赖
5.1非跨周期依赖
对于非跨周期依赖不建议从代码中自动解析(解析不精准),建议手动进行配置,提交代码前再进行二次检查,对于非同调度周期(例如天以来小时),则建议取最大分区,选中使用根节点,日常数据集成ods任务也建议用根节点。

5.2跨周期依赖
跨周期依赖,本质是依赖了上一个实例执行,当上一个实例执行成功,该实例才可以执行,但如果不满足在周期内执行完的任务慎点,例如任务5min调度,每个任务跑10min结果永远跑不完,同时可能因为漏了一个报错

6.任务产出节点
任务产出节点通常是下游要依赖本任务,但如果任务本身名称做了修改,此处节点产出也建议进行修改,方便后续查找。
