任務延遲原因及保證數倉任務及時產出方案【文末送書名單公佈】

之前應該是寫過類似的一篇文章的,這次打算又寫一遍,主要是有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源創計劃”,歡迎正在閱讀的你也加入,一起分享。

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