Dolphin是可視化DAG工作流任務調度系統。本文介紹如何通過Dolphin調度Lindorm計算引擎的批作業和SQL作業。
前提條件
已開通Lindorm計算引擎。如何開通,請參見開通與變配。
使用說明
Dolphin提供的調度能力和使用方法兼容開源,詳細信息請參考開源文檔:Dolphin開源文檔。
步驟一:開通Dolphin服務
登錄Lindorm管理控制臺。
在頁面左上角,選擇實例所屬的地域。
在實例列表頁,單擊目標實例ID或者目標實例所在行操作列的管理。
在左側導航欄,單擊數據庫連接,然后單擊計算引擎頁簽。
單擊開通Dolphin地址。
說明如需使用公網,可單擊界面右上角的開通公網地址進行開通。
步驟二:登錄Dolphin
在計算引擎頁簽,獲取Dolphin地址,并單擊該地址打開Dolphin服務頁面。
使用Lindorm寬表引擎賬號和密碼登錄Dolphin服務,獲取方法請參見用戶管理。
步驟三:創建數據源
在Dolphin控制臺,選擇源中心頁簽,單擊創建源。
選擇源類型
KYUUBI
,并配置以下參數:參數
說明
數據源
選擇
KYUUBI
源名稱
自定義數據源名稱。本文以
Lindorm-test
為例。IP主機名
JDBC連接地址。形如:
ld-bp171py46qn73****-proxy-ldps.lindorm.aliyuncs.com
,獲取方式請參考JDBC連接地址。端口
填寫10009。
用戶名
寬表引擎的默認用戶名或其他新建的用戶名。獲取方式請參考訪問實例。
密碼
寬表引擎的默認密碼或其他新建的密碼。獲取方式參考訪問實例。
數據庫名
填寫default或其他已存在且有訪問權限的數據庫。
數據倉庫
填寫default。
JDBC連接參數
JDBC連接參數。形如:
{"token":"4175f22f-****-416a-943e-57b998da10e1","kyuubi.engine.share.level":"CONNECTION"}
,token獲取方式參考JDBC連接地址。每個CONNECTION對應獨立的計算資源。
單擊測試連接,驗證連通性。
步驟四:創建工作流
在Dolphin控制臺,選擇項目管理頁簽,單擊創建項目,配置項目名稱。
單擊新建的項目名稱,進入項目管理界面。
在左側導航欄,單擊工作流定義,然后單擊創建工作流。
拖拽左側通用組件(SHELL/SQL)到右側畫布,對目標組件進行編輯。
創建節點。
創建SQL節點。
輸入節點名稱,以
sql-test
為例,數據源類型選擇KYUUBI
,數據源實例選擇已創建的數據源Lindorm-test
,輸入SQL語句示例如下:SQL語句示例如下:
SELECT webUI();
添加前置SQL語句,并使用配置任務參數進行設置。
重要前置SQL語句后不加分號。
單擊確認,保存并退出。
創建Shell節點。
輸入節點名稱,以
shell-test
為例,并提交批作業腳本,參數說明請參見創建作業參數說明。腳本示例如下:curl --location --request POST http://${endpoint}:10099/api/v1/lindorm/jobs/${token} --header "Content-Type:application/json" --data '{ "owner":"root", "name":"test", "mainResourceKind":"jar", "mainClass":"com.aliyun.lindorm.WordCount", "mainResource":"oss://java_job/lindorm-spark-examples-1.0-SNAPSHOT.jar", "mainArgs":[], "username":"root", "password":"test" "conf":{ "spark.dynamicAllocation.enabled":"false"} }'
單擊確認,保存并退出。
單擊界面右上角的保存,輸入工作流名稱,執行策略選擇串行等待,并保存工作流。
在目標工作流操作欄圖標,單擊圖標,上線工作流。然后單擊圖標,運行工作流。
在左側導航欄,單擊任務實例,查看當前任務。
在左側導航欄,單擊工作流定義,在目標工作流操作欄圖標,單擊定時圖標,可設置定時調度工作流。
說明建議設置定時調度間隔為30分鐘,且每次調度的節點數不超過10個。
步驟五:作業運維
查看SQL作業詳情
在左側導航欄,單擊任務實例,單擊右側任務欄圖標,進入日志界面。
在日志中搜索
SQL Engine UI
,獲取WebUI的鏈接。通過獲取的鏈接,訪問WebUI界面,查看作業詳情。
查看Shell作業詳情
在左側導航欄,單擊任務實例,單擊右側任務欄圖標,進入日志界面。
在日志中搜索
JobId
,獲取Shell作業的ID。登錄Lindorm管理控制臺。
在頁面左上角,選擇實例所屬的地域。
在實例列表頁,單擊目標實例ID或者目標實例所在行操作列的管理。
在左側導航欄,單擊計算引擎。
在作業列表的JobId中輸入已獲取的Shell作業ID,查找目標作業。
在目標作業搜索結果中獲取WebUI地址。
通過獲取的鏈接,訪問WebUI界面,查看作業詳情。
最佳實踐
在工作流的Shell節點中同步調度JAR作業。參數說明請參見通過REST API管理作業。
#!/bin/bash
# 定義提交作業的 API 地址
SUBMIT_URL="http://${JDBC_URL}:10099/api/v1/lindorm/jobs/${token}"
# 定義作業提交的數據
PAYLOAD='{
"owner":"root",
"name":"test-shell",
"username":"root",
"password":"test",
"mainResourceKind":"sql",
"mainResource":"select webUI()",
"mainArgs":[],
"conf":{
"spark.kubernetes.namespace":"default"
}
}'
# 提交作業
submit_response=$(curl --silent --location --request POST "$SUBMIT_URL" --header "Content-Type:application/json" --data "$PAYLOAD")
# 解析提交響應以獲取 jobId
job_id=$(echo $submit_response | grep -o '"jobId":"[^"]*' | cut -d'"' -f4)
echo $job_id
# 檢查提交作業是否成功
if [[ -z "$job_id" ]]; then
echo "Failed to submit the job."
exit 1
fi
STATUS_URL="$SUBMIT_URL/$job_id"
echo $STATUS_URL
# 檢查作業狀態
while true; do
# 獲取作業狀態
status_response=$(curl --silent --request GET "$STATUS_URL")
# 解析狀態響應以獲取 state
state=$(echo $status_response | grep -o '"state":"[^"]*' | cut -d'"' -f4)
# 打印當前狀態
echo "Current job state: $state"
# 判斷是否完成
if [[ "$state" == "success" ]]; then
echo "Job completed successfully."
exit 0
elif [[ "$state" == "failed" ]]; then
echo "Job failed."
exit 1
fi
# 暫停 60 秒后再次檢查狀態
sleep 60
done