任务延迟原因及保证数仓任务及时产出方案【文末送书名单公布】

之前应该是写过类似的一篇文章的,这次打算又写一遍,主要是有2个原因


  • 近期有了新的感悟

  • 近期经历的一个任务延迟产出问题


由于疫情原因,目前进入一些小区或者医院需要出示健康码及行程码,如果没去过高风险区的话,健康码应该是绿色的,行程码也应该如下:



前段时间,回了趟老家,所以在回到杭州的时候,行程码上多了一个江西,官方提示,只显示14天内达到或途径的地点,所以讲道理,14天后应该不会显示江西了。


等到第14天,大概早上8点20的时候,我老婆发现行程码上还是有江西,就问我啥情况,作为一个专业数据人,这个时候就跟她普及了一下知识,大概意思就是数仓任务延迟了,让她到10点再看看,那时候数据跑出来之后,行程码上应该没江西了。果然,差不多10点钟就来跟我报告了,说行程码上已经没有了江西。



一般情况下,数仓任务数据偶尔延迟,产生的影响不会很大,当然,具体大不大,还是得看具体的场景。


比如行程码这类,其实影响蛮大的,比如有些医院,近14天去过外地的不让进去,那本来等到第14天的时候赶个早去医院做个核酸检测,发现数仓任务没跑完,还是显示有外地的数据,这不耽误事吗?


所以作为数据开发人员,我们肯定不希望这类事情发生,我们需要想方设法的去保证数仓任务及时产出,甚至提前产出。那么应该如何去做呢?


一 模型层面


1.1 模型设计层面


这个就没啥好说的了,严格按照模型架构,模型设计原则,分层原则去做模型设计,这个就没啥好说的了,如果这个没设计好,是会影响任务产出的,比如链路过长。


1.2 模型迭代


模型在迭代后,一定要先试运行再提交,保证此次模型迭代是没问题的,然后一定要看一下下游任务会不会受影响,尤其是在新增字段的时候,如果下游是使用了select * 这种操作,极大的可能是会出现问题的,所以这些在定制开发规范的时候就应该需要规定好。如果这些都没去校验的话,晚上极有可能是会有报错情况的,因为这么多年的经验发现,只要白天没有新任务上线或者老任务迭代,晚上不出意外情况的话,一般是不会有报错的,特殊情况除外。

但是只要白天上了新任务或者核心的模型进行了迭代,晚上值班人员就会慌得一批,一般都会报错。


1.3 模型优化层面


模型优化其实是多方面的,但是跟任务及时产出有关系的主要有一个任务调优及事实表或者维表的横向或者水平拆分。


之前任务有一条链路产出时间非常晚,几乎都是10点之后,后来发现主要有2方面的原因:

  • 一个任务执行时长达到2小时

  • 一个是一张核心维表有2个属性依赖于爬虫,爬虫每天早上6点才能爬到数据


所以当时我们做了2个方面的优化,一个是对运行时长过长的任务进行了sql层面的调优,最后这个任务15分钟就能产出,另一方面我们对该维表进行了垂直拆分,解决了2个爬虫获取的属性直接影响核心报表产出的延迟问题


当然具体的优化还是得看具体的场景,优化方式也是比较多的。


1.4 模型优先级设置


每个任务都应该设置任务优先级,这样我们就能知道哪些任务产出就基本能代表数仓核心任务全部跑完,并且在告警机制里面,优先级也是非常重要的一项参考。


二 调度层面


2.1 调度系统


目前发现的调度系统会存在以下2个问题


  • 上游所有任务都跑完了,但是下游不会调起来或者很久之后才调起来,导致任务延迟

  • 任务其实已经跑完了,但是状态一直是running,没有变成success,导致下游任务一直调不起来,导致任务延迟

这一块就需要负责调度系统的同学及时的去发现并且去解决这些问题,我们数据部门的同学也要及时的去跟他们反馈。


2.2 任务调度配置


  • 任务没有配置上游依赖,可能会导致跑出来的数据全部是有问题的,这个时候就需要重跑,比其他问题引起的任务延迟更严重,因为这种的可能导致整个数仓任务重跑,换句话说就是晚上跑的任务都白跑了。


  • 任务配置了相互依赖,大家都别想跑了,这个需要特别注意一下的。


三 大数据运维层面


3.1 资源


及时评估存储及计算资源,之前发生过存储不足导致晚上大批量任务报错的情况。


3.2 组件故障


这种遇到比较多的就是hive on spark出现问题了,连接不上,导致大批量任务报错。


四 监控层面


4.1 数据质量监控


对抽取的数据量,核心模型数据唯一性,核心指标阈值进行实时监控,避免数据有问题也没发现,导致白天所有下游任务需要重跑。


4.2 任务延迟未产出监控


这个就比较好理解了,一般我们运行的任务都会有一个差不多的时间范围,比如某个核心任务一般4点-4点半就会产出,但是今天凌晨在6点钟开没开始跑或者还没跑完,这个时候就应该有监控报警,提示值班人员该任务产出时间异常。


五 值班层面


什么是值班?就是晚上不但要睡觉,还有负责整个数据部门的任务正常运行,若不正常则需要处理。


上面说了那么多的方案,优化,报错,数据质量监控,任务延迟产出告警啥的,但是如果没有人去处理这些问题,那将毫无意义。


这个时候我们将需要进行值班人员安排,周期安排,还有对应的告警机制,是邮件告警,短信告警还是电话轰炸呢,还有发现问题处理不了的话应该找哪一方,任务延迟故障定级等。



----【送书获奖名单】----

送书活动链接如下:

【送书】YYDS《剑指Offer》再续新篇,百万程序员人手一册


中奖读者一(留言点赞最多):lim时



中奖读者二(抽奖中奖):bingo


请以上二位中奖读者:lim时bingo
速速联系小编,留下收件信息,
我们将在一周内发出快递,敬请查收。


- THE END-


关注+星标,不迷路。分享干货

每月都会送几波新书,白嫖不香吗?

-今日互动-


你get到了吗?欢迎文章下方留言互动




如果感觉对你有帮助的话


                
                
                
来个「 转发朋友圈 」和「 在看 」,是对我们最大的支持!

本文分享自微信公众号 - DataScience(DataScienceTeam)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章