💡 本系列文章是 DolphinScheduler 由淺入深的教程,涵蓋搭建、二開迭代、核心原理解讀、運維和管理等一系列內容。適用於想對 DolphinScheduler瞭解或想要加深理解的讀者。
祝開卷有益:)
用過 DolphinScheduler 的小夥伴應該都知道,DolphinScheduler 的依賴任務是被動檢測的,下游配置了上游的依賴,下游任務啟動的時候,會檢測上游任務是否成功,這個過程不是很複雜,但卻是比較容易出問題的。
本文先說明了依賴節點刪除的影響(背景),最後是巡檢任務的邏輯(解決方案)。
感興趣的小夥伴也可以看看之前的歷史文章:
海豚排程調優 | 如何解決任務被禁用出現的Bug
海豚排程調優 | 正在執行的工作流(DAG)如何重新拉起失敗的任務(Task)
背景:
使用排程的團隊越來越多,任務也越來越多,互相依賴的任務也變多了,任務會隨著數倉的迭代,進行下線、刪除等操作。
如圖,工作流① 裡面有任務 A,工作流② 裡面有任務 dep_A 和 B。
開啟依賴節點dep_A,可以看到上游任務是 A,可以正常限時任務名字。
我把任務 A 刪掉,如圖1-3,開啟依賴節點dep_A,就只能看到一個code,不能顯示名稱了。(其實就是找不到上游任務了)。
工作流② 後面在執行的時候,依賴節點dep_A,在執行的時候就會一直卡在那裡,找不上游任務,因為已經被刪了或者被禁用了。
為什麼呢?因為依賴(DEPENDE)節點裡面配置的是上游任務的projectCode、definitionCode、depTaskCode。只要上游任務被禁用、刪除、或者複製了一個新的出來,depTaskCode 就會變或者找不到。
依賴節點找不到上游任務是誰,就沒辦法判斷執行狀態了,就會一直卡在那裡。
解決方案:
回到生產環境,使用排程的團隊越來越多,任務也越來越多,互相依賴的任務也變多了,任務會隨著數倉的迭代,進行下線、刪除等操作。這種依賴缺失的現象就越來越多了,這是使用者操作不當導致的重大生產事故,必須要防止這種情況。
解決方案就是新增一個依賴巡檢。一段 SQL + 一個告警指令碼搞定!
第一步是先清理排程任務的血緣關係到一張 mysql 表。
第二步是檢測依賴缺失,報警到釘釘群。
先看下 SQL主要邏輯邏輯,清洗排程任務的關係,包括依賴節點,依賴節點是一個json結構的資料,把它解析出來,最後看關聯不上的任務,就是缺失依賴的任務,然後告警出來。
①清洗邏輯如下:
指令碼放在 GitHub上了,dep_mysql.sql[1]
清洗之後,產出了 4 張表
1.t_ds_dag_task_relation_base_data 關係基礎資料表
2.t_ds_task_node_base_data 任務基礎表,後續會用於 Nebula Graph,這個後面會講。
3.t_ds_dag_task_relation_dep_data_df 依賴節點關係表,用於後續依賴告警的的主表
4.t_ds_dag_task_relation_data_df 關係最終表,後續會用於 Nebula Graph,這個後面會講。
②寫一個 Python 指令碼執行上述 SQL
指令碼放在 GitHub上了,run_dep_mysql.py[2]
主要是執行第一步的 SQL。
③告警指令碼:
指令碼放在 GitHub上了,check_dolphin_deps_lost.py[3]
主要是拿 t_ds_dag_task_relation_dep_data_df 這個表的上游工作流code、上游任務code 關聯 t_ds_task_node_base_data 任務資訊表,關聯不上的就是被刪除了或者修改了,要告警出來,提醒使用者。
④告警結果展示!
新增了這個依賴巡檢之後,使用者操作導致的依賴缺失問題被解決了,使用者改動任務再也不用擔心了!就算操作失誤,巡檢也會告警出來,提醒使用者及時修復掉。
這個 SQL 放在 Mysql 執行速度很快,對主庫沒什麼壓力,可以把資料實時同步到 Doris ,再做巡檢,也是可以的。
以上就是依賴缺失巡檢的全部內容,如果有任何疑問,都可以與我交流,希望可以幫到你,下次見。
參考資料
[1]
dep_mysql.sql:https://github.com/aikuyun/dolphin_practices/blob/main/dep_mysql.sql
[2]
run_dep_mysql.py:https://github.com/aikuyun/dolphin_practices/blob/main/run_dep_mysql.py
[3]
check_dolphin_deps_lost.py:https://github.com/aikuyun/dolphin_practices/blob/main/check_dolphin_deps_lost.py
本文由 白鯨開源 提供釋出支援!