開源項目推薦 - 巨鯨任務調度平台(Spark、Flink)


# Big Whale
巨鯨任務調度平台為美柚大數據研發的分布式計算任務調度系統,提供Spark、Flink等批處理任務的DAG執行調度和流處理任務的狀態監測調度,並具有重復應用檢測、大內存應用檢測等功能。
服務基於Spring Boot 2.0開發,打包后即可運行。[[Github]](https://github.com/MeetYouDevs/big-whale)[[Gitee]](https://gitee.com/progr1mmer/big-whale)

# 部署
## 1.准備
* Java 1.8+
* Mysql 5.1.0+
* 下載項目或git clone項目
* 為解決 github README.md 圖片無法正常加載的問題,請在hosts文件中加入相關域名解析規則,參考:[hosts](https://github.com/MeetYouDevs/big-whale/blob/master/doc/hosts)
## 2.安裝
* 創建數據庫:big-whale
* 運行數據庫腳本:[big-whale.sql](https://github.com/MeetYouDevs/big-whale/blob/master/script/big-whale.sql)
* 根據Spring Boot環境,配置相關數據庫賬號密碼,以及SMTP信息
* 配置:[big-whale.properties](https://github.com/MeetYouDevs/big-whale/blob/master/src/main/resources/big-whale.properties)
* 配置項說明
* ssh.user: 擁有腳本執行權限的ssh遠程登錄用戶名(平台會將該用戶作為統一的腳本執行用戶)
* ssh.password: ssh遠程登錄用戶密碼
* dingding.enabled: 是否開啟釘釘告警
* dingding.watcher-token: 釘釘公共群機器人Token
* yarn.app-memory-threshold: Yarn應用內存上限(單位:MB),-1禁用檢測
* yarn.app-white-list: Yarn應用白名單列表(列表中的應用申請的內存超過上限,不會進行告警)
* 修改:$FLINK_HOME/bin/flink,參考:[flink](https://github.com/MeetYouDevs/big-whale/blob/master/bin/flink)(因flink提交任務時只能讀取本地jar包,故需要在執行提交命令時從hdfs上下載jar包並替換腳本中的jar包路徑參數)
* 打包:mvn clean package
## 3.啟動
* 檢查端口17070是否被占用,被占用的話,關閉占用的進程或修改項目端口號配置重新打包
* 拷貝target目錄下的big-whale.jar,執行命令:java -jar big-whale.jar
## 4.初始配置
* 打開:http://localhost:17070
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step1-login.png)
* 輸入賬號admin,密碼admin
* 點擊:權限管理->用戶管理,修改當前賬號的郵箱為合法且存在的郵箱地址,否則會導致郵件發送失敗
* 添加集群
* 集群管理->集群管理->新增
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step2-cluster_add.png)
* “yarn管理地址”為Yarn ResourceManager的WEB UI地址
* “程序包存儲目錄”為程序包上傳至hdfs集群時的存儲路徑,如:/data/big-whale/storage
* “支持Flink任務代理用戶”“流處理任務黑名單”和“批處理任務黑名單”為內部定制的任務分配規則,勿填
* 添加代理
* 集群管理->代理管理->新增
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step3-cluster_agent_add.png)
* 可添加多個實例,執行腳本的時候會隨機選擇一個實例執行,在實例不可達的情況下,會繼續隨機選擇下一個實例,在實例均不可達時執行失敗
* 選擇集群后,會作為該集群下提交Spark或Flink任務的代理之一
* 添加集群用戶
* 集群管理->集群用戶->新增
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step4-cluster_cluster_user_add.png)
* 該配置的語義為:平台用戶在所選集群下可以使用的Yarn資源隊列(--queue)和代理用戶(--proxy-user)
* 添加計算框架版本
* 集群管理->版本管理->新增
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step5-cluster_compute_framework_add.png)
* 同一集群下不同版本的Spark或Flink任務的提交命令可能有所不同,如Spark 1.6.0版本的提交命令為spark-submit,Spark 2.1.0版本的提交命令為spark2-submit
# 使用
## 1.新建腳本
* 腳本管理->新增
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step6-script_add.png)
* “類型”有shell批處理、spark流處理、spark批處理、flink流處理和flink批處理,示例為:spark流處理
* 因為當前用戶為超級管理員,可為所有用戶創建腳本,故可以選擇“用戶”
* 非“shell批處理”類型的腳本應上傳與之處理類型相對應的程序包,此處為spark流處理任務打成的jar包
* “資源選項”可不填
* 代碼有兩種編輯模式,“可視化視圖”和“代碼視圖”,可互相切換
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step7-script_add_code.png)
## 2.執行腳本
* 腳本管理
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step8-script_list.png)
* 點擊執行[上一步](#1新建腳本)新建的腳本
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step9-script_execute_running.png)
* 執行成功后可查看Yarn應用詳情連接(代理實例上Yarn任務提交命令的日志級別請設置為:INFO)
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step10-script_execute_success.png)
* 執行超時或失敗會有相應的郵件告警
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/steperr-script_execute_timeout.png)
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/steperr-script_execute_failed.png)
## 3.任務調度
### 3.1 批處理
* 任務調度->新增->批處理
* 對於類型為“shell批處理”、“spark批處理”和“flink批處理”的腳本,可通過添加此功能實現DAG執行調度 (v1.1開始支持,需要從v1.0升級的,請查閱[SchedulingFieldGenerateForV1_1Test.java](https://github.com/MeetYouDevs/big-whale/blob/master/src/test/java/com/meiyouframework/bigwhale/test/SchedulingFieldGenerateForV1_1Test.java))
* 說明:為防止平台線程被大量占用,平台提交Saprk或Flink任務的時候都會強制以“后台”的方式執行,對應spark配置:--conf spark.yarn.submit.waitAppCompletion=false,flink配置:-d,但是基於后台“批處理應用狀態更新任務”的回調,在實現DAG執行引擎時可以確保當前節點腳本所提交的批處理任務運行完成后再執行下一個節點的腳本
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step11-scheduling_batch_add.png)
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step12-scheduling_batch_list.png)
### 3.2 流處理
* 任務調度->新增->流處理
* 對於類型為“spark流處理”和“flink流處理”的腳本,可通過添加此功能實現狀態監測調度
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step13-scheduling_streaming_add.png)
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/step14-scheduling_streaming_list.png)
* 可根據狀態監測結果進行相應的處理,如異常重啟、批次積壓告警等
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/steperr-spark_streaming_failed.png)
![image](https://gitee.com/progr1mmer/big-whale/raw/master/doc/images/steperr-spark_streaming_overstock.png)
## 4.Openapi
* /openapi/script/execute.api 執行腳本
* /openapi/scheduling/execute.api 執行任務調度(批處理)
* 請求方式: POST Body
* 參數:
* sign: 用戶密碼Base64
* id: 腳本ID或離線調度ID
* args: 腳本參數(可選)
```
{
"sign": "c3V4aWFveWFuZzExIQ==",
"id": "8a80813a7154f28a017154f6637c1794",
"args": {
"$output_dir": "/var",
"$dt": "20200415"
}
}
```
# License
The project is licensed under the [Apache 2 license](https://github.com/MeetYouDevs/big-whale/blob/master/LICENSE).


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM