akkaflow
簡(jiǎn)介
akkaflow
是一個(gè)基于akka
架構(gòu)上構(gòu)建的分布式高可用ETL工作流調(diào)度工具,可以把任務(wù)分發(fā)在集群中不同的節(jié)點(diǎn)上并行執(zhí)行峭火,高效利用集群資源被芳,支持時(shí)間及任務(wù)混合觸發(fā)襟企;提供多種節(jié)點(diǎn)類(lèi)型。其中工作流由xml文件寝凌,并且提供一套完整的基于Shell的操作命令集勋陪,簡(jiǎn)潔易用,長(zhǎng)期穩(wěn)定運(yùn)行硫兰,可作為構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)诅愚、或大數(shù)據(jù)平臺(tái)上的調(diào)度工具。
用戶(hù)提交的xml工作流定義文件劫映,滿(mǎn)足觸發(fā)條件后违孝,系統(tǒng)會(huì)觸發(fā)執(zhí)行工作流;實(shí)例運(yùn)行產(chǎn)生的各類(lèi)數(shù)據(jù)將被記錄并提供用戶(hù)查看與進(jìn)一步操作泳赋,其中
- 簡(jiǎn)單的前端操作頁(yè)面詳見(jiàn)演示地址雌桑,演示賬號(hào)密碼分別為admin/admin,機(jī)器配置為(1內(nèi)核,1G內(nèi)存)
- 工作流定義文檔詳見(jiàn)這里 祖今,目前支持行動(dòng)節(jié)點(diǎn)類(lèi)型有以下校坑,可進(jìn)一步擴(kuò)展功能
行動(dòng)節(jié)點(diǎn)類(lèi)型 | 節(jié)點(diǎn)功能簡(jiǎn)述 |
---|---|
<sql/> |
sql執(zhí)行節(jié)點(diǎn),目前支持Hive千诬、Mysql耍目、Oracle、Impala數(shù)據(jù)庫(kù)徐绑。 |
<transfer/> |
數(shù)據(jù)傳輸節(jié)點(diǎn)邪驮,目前支持Mysql、Oracle傲茄、Hive毅访、本地文件、hdfs文件之間的數(shù)據(jù)行傳輸盘榨。 |
<metadata/> |
元數(shù)據(jù)配置節(jié)點(diǎn)(庫(kù)表注釋配置)喻粹,可通過(guò)血緣表自動(dòng)配置目標(biāo)表元數(shù)據(jù),亦可顯式配置草巡。 |
<script/> |
腳本代碼執(zhí)行節(jié)點(diǎn)守呜,支持各類(lèi)型腳本,bash、python弛饭、perl、scala等萍歉。 |
<file-executor/> |
腳本文件遠(yuǎn)程執(zhí)行節(jié)點(diǎn)侣颂,把master機(jī)器上的腳本文件及附件分發(fā)到目標(biāo)worker機(jī)器上執(zhí)行。 |
<file-monitor/> |
文件監(jiān)控節(jié)點(diǎn)枪孩,監(jiān)控本地或hdfs文件數(shù)量及大小憔晒。 |
<data-monitor/> |
數(shù)據(jù)監(jiān)控節(jié)點(diǎn),可監(jiān)控?cái)?shù)據(jù)庫(kù)記錄數(shù)蔑舞,文件行數(shù)拒担,文件大小等不同類(lèi)型數(shù)據(jù)。 |
<email/> |
自定義郵件節(jié)點(diǎn)攻询,可以以html形式自定義郵件內(nèi)容从撼,發(fā)送目標(biāo)郵箱。 |
- 使用示例點(diǎn)擊這里
- 基于shell命令集操作文檔詳見(jiàn)下面使用章節(jié)
整個(gè)akkaflow
架構(gòu)目前包含有四個(gè)節(jié)點(diǎn)角色:Master钧栖、Master-Standby低零、Worker、Http-Server拯杠,每個(gè)角色可以獨(dú)立部署于不同機(jī)器上掏婶,支持高可用。
節(jié)點(diǎn)角色關(guān)系圖
-
Master
活動(dòng)主節(jié)點(diǎn)潭陪,調(diào)度觸發(fā)工作流實(shí)例雄妥,分發(fā)子任務(wù) -
Master-Standby
熱備份主節(jié)點(diǎn),當(dāng)主節(jié)點(diǎn)宕機(jī)依溯,立刻切換為活動(dòng)主節(jié)點(diǎn) -
Worker
任務(wù)節(jié)點(diǎn)老厌,可部署在多個(gè)機(jī)器上,運(yùn)行主節(jié)點(diǎn)分發(fā)過(guò)來(lái)的任務(wù)黎炉,并反饋運(yùn)行結(jié)果梅桩。 -
Http-Server
http服務(wù)節(jié)點(diǎn),提供http API查看操作當(dāng)前akkaflow系統(tǒng)拜隧。
Aaron Swartz
部署
1宿百、打包
- 可以直接在這里下載
akkaflow-x.x.zip
,這是已經(jīng)打包好的程序包 - 可以把工程check out下來(lái)洪添,用sbt-native-packager進(jìn)行編譯打包(直接運(yùn)行
sbt dist
)
2垦页、安裝
- 安裝環(huán)境:Linux系統(tǒng)(UTF8編碼環(huán)境)或MacOS、jdk1.8或以上干奢、MySQL5.7或以上
- 設(shè)置好
JAVA_HOME
環(huán)境變量
3痊焊、目錄說(shuō)明
-
sbin
存放用戶(hù)操作命令,如啟動(dòng)節(jié)點(diǎn)命令等 -
lib
存放相關(guān)jar包 -
logs
存放相關(guān)日志 -
config
存放相關(guān)配置文件 -
xmlconfig
存放示例工作流文件,系統(tǒng)啟動(dòng)時(shí)會(huì)自動(dòng)載入
4薄啥、安裝步驟 (偽分布式部署):
- 解壓到
/your/app/dir
- 準(zhǔn)備一個(gè)mysql數(shù)據(jù)庫(kù)辕羽,(如數(shù)據(jù)庫(kù)名稱(chēng)為wf,用戶(hù)密碼分別為root/root)
- 準(zhǔn)備一個(gè)郵箱賬戶(hù)(推薦用網(wǎng)易郵箱)垄惧,支持smtp方式發(fā)送郵件刁愿。
- 修改配置文件
config/application.conf
中以下部分(基本修改數(shù)據(jù)庫(kù)以及郵件配置項(xiàng)就可以了)
mysql { //用mysql來(lái)持久化數(shù)據(jù)
user = "root"
password = "root"
jdbc-url = "jdbc:mysql://localhost:3306/wf?autoReconnect=true"
is-enabled = true
}
email { //告警郵箱設(shè)置
hostname = "smtp.163.com"
smtp-port = 465 //smtp端口,可選
auth = true
account = "15018735011@163.com"
password = "******"
charset = "utf8"
is-enabled = true
}
extra { //hdfs集群配置
hdfs-uri = "hdfs://quickstart.cloudera:8020"
}
- 啟動(dòng)角色(獨(dú)立部署模式)
其中到逊,當(dāng)前偽分布部署铣口,是把master、worker觉壶、http-servers在同一臺(tái)機(jī)器的不同端口啟動(dòng)
執(zhí)行:./standalone-startup
- 查看啟動(dòng)日志
啟動(dòng)時(shí)會(huì)在終端打印日志脑题,另外,日志也追加到./logs/run.log
中铜靶,tail一下日志叔遂,看下啟動(dòng)時(shí)是否有異常,無(wú)異常則表示啟動(dòng)成功争剿。 - 查看進(jìn)程
啟動(dòng)完后掏熬,使用jps查看進(jìn)程
2338 HttpServer
2278 Worker
2124 Master
注意:akkaflow工作流定義可以存放于xmlconfig下,akkaflow啟動(dòng)時(shí)秒梅,會(huì)自動(dòng)并一直掃描xmlconfig下面的文件旗芬,生成對(duì)應(yīng)的worflow提交給Master,所以工作流文件捆蜀,也可以放到該目錄中疮丛,安裝包下的xmlconfig/example下有工作流定義示例。
5辆它、關(guān)閉集群
執(zhí)行./sbin/stop-cluster
, 關(guān)閉集群系統(tǒng)
命令使用
1誊薄、角色節(jié)點(diǎn)操作命令
- standalone模式啟動(dòng):
sbin/standalone-startup
(該模式下會(huì)啟動(dòng)master、worker锰茉、http-server) - master節(jié)點(diǎn)啟動(dòng):
sbin/master-startup
- worker節(jié)點(diǎn)啟動(dòng):
sbin/worker-startup
- http_server節(jié)點(diǎn)啟動(dòng):
sbin/httpserver-startup
- master-standby節(jié)點(diǎn)啟動(dòng):
sbin/master-standby-startup
- 關(guān)閉集群:
sbin/stop-cluster
2呢蔫、akkaflow操作命令集
命令集入口
kentdeMacBook-Pro:sbin kent$ ./akka
_ _ _ __ _
/ \ | | __| | __ __ _ / _|| | ___ __ __
/ _ \ | |/ /| |/ // _` || |_ | | / _ \\ \ /\ / /
/ ___ \ | < | <| (_| || _|| || (_) |\ V V /
/_/ \_\|_|\_\|_|\_\\__,_||_| |_| \___/ \_/\_/
【使用】
akka [ front| instance| workflow| util]
【說(shuō)明】
akkaflow調(diào)度系統(tǒng)命令入口。
1飒筑、akka front 調(diào)度系統(tǒng)首頁(yè)
2片吊、akka instance 工作流實(shí)例操作命令集,詳見(jiàn)該命令
3协屡、akka workflow 工作流操作命令集俏脊,詳見(jiàn)該命令
4、akka util 輔助操作命令集肤晓,詳見(jiàn)該命令
【示例】
akka front
akka instance -info -log 574de284 (查看某實(shí)例)
akka workflow -kill 574de284 (殺死某運(yùn)行中的實(shí)例)
命令集合列表
注意: 除了節(jié)點(diǎn)啟動(dòng)命令认然,把工作流定義的xml文件放在xmlconfig目錄下漫萄,可自動(dòng)掃描添加對(duì)應(yīng)工作流或調(diào)度器,也可以用命令提交.
任務(wù)實(shí)例告警郵件
版本計(jì)劃
- 界面集成一個(gè)可視化拖拉配置工作流與調(diào)度器的開(kāi)發(fā)功能模塊(這一塊感覺(jué)自己做不來(lái))腾务,目前的工作流以及調(diào)度器主要還是要自己編寫(xiě)xml文件毕骡,不夠簡(jiǎn)便。
- 增加運(yùn)行節(jié)點(diǎn)收集機(jī)器性能指標(biāo)的功能。
- 外面套一層功能權(quán)限管理的模塊葵孤,區(qū)分限制人員角色模塊及數(shù)據(jù)權(quán)限,支持多人使用或協(xié)助的場(chǎng)景尤仍。