Go語言dolphinscheduler任務調(diào)度處理
簡介

dolphinscheduler是一個可視化DAG工作流任務調(diào)度平臺,在大數(shù)據(jù)領域做任務調(diào)用非常流行
提供了類似azkaban工作流調(diào)度,比azkaban更強的可視化DAG,支持大數(shù)據(jù)領域flink,spark,shell,python,java,scala,http等各種類型任務
官網(wǎng)傳送門: https://dolphinscheduler.apache.org/zh-cn/
自動化
為什么需要自動化任務處理,當你的dolphinscheduler有幾百上千個任務,管理是非常耗時的,如果每個任務都配置郵件告警,那一有問題整天都在救火
此時就需要任務結果監(jiān)控和任務重跑來解決 失敗任務和任務自動重跑,避免浪費過多時間在維護dolphinscheduler任務上
使用
在調(diào)用api之前需要為用戶申請token,按圖操作

dolphinscheduler提供類似swagge接口UI工具,訪問doc地址訪問
http://ip:12345/dolphinscheduler/doc.html?language=zh_CN&lang=cn

例子
該demo還是使用了http請求包(HttpRequest),json數(shù)據(jù)搜索包(go-jmespath)
任務結果檢查
填坑說明
- 日期處理: 使用了%20轉譯空格,使用Sprintf方法拼接字符串
- 多種數(shù)據(jù)類型: 使用interface{}來支持int,string等多種數(shù)據(jù)類型
- 數(shù)據(jù)轉換1: 將byte數(shù)據(jù)轉成json格式,方便搜索
- 數(shù)據(jù)轉換2: 將interface{}數(shù)據(jù)轉成字符串切片,方便使用
該方法可以做成周期性任務運行,將失敗的job查出來,后續(xù)是要告警通知,還是根據(jù)job名稱查出對應id進行重跑任務
package main
import (
"encoding/json"
"fmt"
"github.com/jmespath/go-jmespath"
"github.com/kirinlabs/HttpRequest"
"time"
)
var (
url = "http://ip:12345/dolphinscheduler"
token = "xxxxxxx"
req *HttpRequest.Request
)
func init() {
req = HttpRequest.NewRequest().Debug(true).SetTimeout(time.Second*5).
SetHeaders(map[string]string{
"token":token,
})
}
func main() {
//testConn()
jobCheck()
}
func jobCheck() {
//獲取日期
today := time.Now().Format("2006-01-02")
tomorrow := time.Now().AddDate(0, 0, +1).Format("2006-01-02")
//拼接日期 %20是空格的轉譯
fmt.Println(fmt.Sprintf("%v%v",today,"%2000:00:00"))
fmt.Println(fmt.Sprintf("%v%v",tomorrow,"%2000:00:00"))
//需要檢查的項目名稱
projects := []string{"jdOrder","jdPlay"}
//需要檢查的時間段 頁碼是int類型,日期是string類型
m := make(map[string]interface{})
m["pageNo"] = 1
m["pageSize"] = 22
m["stateType"] = "FAILURE"
m["startDate"] = fmt.Sprintf("%v%v",today,"%2000:00:00")
m["endDate"] = fmt.Sprintf("%v%v",tomorrow,"%2000:00:00")
for _, project := range projects {
resp, _ := req.Get(url+"/projects/"+project+"/task-instance/list-paging",m)
if resp.StatusCode() != 200 {
fmt.Println("job檢查狀態(tài)碼不符期望: ",resp.StatusCode())
return
}
fmt.Println("resp",resp)
//將返回數(shù)據(jù)從byte轉成json格式
body, _ := resp.Body()
var i interface{}
var s []string
_ = json.Unmarshal(body, &i)
//搜索出需要的字段對應數(shù)據(jù)
processInstanceNames, _ := jmespath.Search("data.totalList[*].processInstanceName", i)
//將interface轉成[]string
for _,v := range processInstanceNames.([]interface{}) {
s = append(s,v.(string))
}
//打印出結果
for _,v := range s {
fmt.Println(v)
}
}
}
測試連接
如果上小節(jié)任務跑不成功,可以先運行該方法,測試連接正確性
func testConn() {
resp, _ := req.Get(url + "/projects/query-project-list")
fmt.Println("resp",resp)
body, _ := resp.Body()
var i interface{}
_ = json.Unmarshal(body, &i)
fmt.Println("i",i)
}重跑任務
重跑任務其實就是再次啟動任務,直接調(diào)用start_job既可
項目名稱和ID需要通過該接口獲取,這個是固定的
http://ip:12345/dolphinscheduler/projects/monitor/process/list-paging
調(diào)用示例: startJob("ads_jd_order",678)
func startJob(projectName string,projectId int) {
m := make(map[string]interface{})
m["failureStrategy"] = "CONTINUE"
m["warningGroupId"] = 0
m["warningType"] = "NONE"
m["runMode"] = "RUN_MODE_SERIAL"
m["processInstancePriority"] = "MEDIUM"
m["workerGroup"] = "default"
m["processDefinitionId"] = projectId
resp, _ := req.JSON().Post(url+"projects/" + projectName+"/executors/start-process-instance",m)
if resp.StatusCode() != 200 {
fmt.Println("job開始狀態(tài)碼不符期望: ",resp.StatusCode())
return
}
}小結
dolphinscheduler api調(diào)用有文檔,不太復雜,但網(wǎng)上資料較少,需要自行摸索,以上就是Go語言dolphinscheduler任務調(diào)度處理的詳細內(nèi)容,更多關于Go語言dolphinscheduler任務調(diào)度的資料請關注腳本之家其它相關文章!
相關文章
Golang中println和fmt.Println區(qū)別解析
Golang 中打印數(shù)據(jù)通常使用 fmt.Println() 方法,也可以使用內(nèi)置的 println() 方法。這兩個方法大家可能都使用過,它們的區(qū)別是什么呢?本文給大家詳細講解,感興趣的朋友跟隨小編一起看看吧2023-03-03
golang實現(xiàn)頁面靜態(tài)化操作的示例代碼
這篇文章主要介紹了golang實現(xiàn)頁面靜態(tài)化操作的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02
Golang使用crypto/ed25519實現(xiàn)數(shù)字簽名和驗證
本文將深入探討如何在?Golang?中使用?crypto/ed25519?進行數(shù)字簽名和驗證,我們將從基本原理開始,逐步引導讀者了解生成密鑰對、進行數(shù)字簽名,以及驗證簽名的具體過程,希望對大家有所幫助2024-02-02
Go語言調(diào)用Shell與可執(zhí)行文件的實現(xiàn)
這篇文章主要介紹了Go語言調(diào)用Shell與可執(zhí)行文件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10

