前言
????kettle支持Carte服務(wù)級(jí)部署模式,即服務(wù)器后臺(tái)會(huì)跑一個(gè)常駐Carte程序哪廓,job/trans都運(yùn)行在這個(gè)服務(wù)里违柏。這篇文章主要講述carte從配置、任務(wù)提交到監(jiān)控的實(shí)踐木西。
0x01 介紹
? ??Kettle有多種運(yùn)行模式,最簡單易用的是直接運(yùn)行Kitchen/Pan應(yīng)用程序來執(zhí)行job/transformations随静,但每次運(yùn)行任務(wù)時(shí)八千,kitchen/pan都要啟動(dòng)一次吗讶。而應(yīng)用的啟動(dòng)是有代價(jià)的,并且如果服務(wù)器上同時(shí)跑了很多Kitchen/Pan程序恋捆,也不利于資源分配和監(jiān)控照皆。
????Carte是一個(gè)輕量級(jí)的web服務(wù),允許遠(yuǎn)程請(qǐng)求HTTP進(jìn)行監(jiān)控沸停、啟動(dòng)膜毁、停止在Carte服務(wù)上運(yùn)行的job和trans。運(yùn)行Carte的服務(wù)器在kettle術(shù)語里稱為slave server愤钾。
0x02 配置&啟動(dòng)
? ? Kettle的下載安裝就不再贅述瘟滨,carte的配置文件主要用來配置端口、安全認(rèn)證等能颁。比如配置文件pwd/carte-config-master.xml杂瘸,配置項(xiàng):
? ?port:綁定的端口號(hào)
? ?hostname: 綁定的IP
? ?username/password:認(rèn)證用戶
啟動(dòng)命令:nohup ./carte.sh pwd/carte-config-master.xml?2>&1 &
web地址:http://ip:9080,會(huì)提示輸入用戶名密碼伙菊,可能Chrome不會(huì)有彈出框败玉,多換個(gè)瀏覽器試試。
? ? 在carte上跑的任務(wù)的日志統(tǒng)一輸出到了carte日志里镜硕,不能為每個(gè)任務(wù)設(shè)置日志运翼。
0x03 調(diào)用
遠(yuǎn)程提交job/trans時(shí),同樣支持資料庫提交任務(wù)谦疾,carte服務(wù)器上需要提前配置好資料庫。執(zhí)行job的api是kettle/executeJob犬金,通過curl提交命令:
curl -u "cluster:cluster" "http://dev-bi-cdh05:9080/kettle/executeJob/?rep=rep-test01&job=/test01_job&P1=test"
? ? -u :指定用戶名和密碼
? ? rep參數(shù):指定配置的資料庫
????job參數(shù):執(zhí)行的job
????P1參數(shù):kettle的參數(shù)變量P1的值
訪問web url可以看每個(gè)任務(wù)的運(yùn)行狀態(tài)念恍、查看任務(wù)的運(yùn)行日志:
0x04 監(jiān)控
? ? 在web上可以看到所提交的job/trans運(yùn)行狀態(tài)、查看日志晚顷,但獲得的信息還是太有限峰伙,既然carte運(yùn)行在JVM上,就可以用JMX的方式監(jiān)控服務(wù)该默。開啟JMX瞳氓,只需在carte.sh文件的OPT這一行末尾新增:?-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9180 -Dcom.sun.management.jmxremote.ssl=false
上述配置jmx綁定9180端口,為了調(diào)試方便栓袖,禁用安全認(rèn)證匣摘。開啟JMX后,通過第三方服務(wù)就能很便捷的對(duì)carte應(yīng)用和服務(wù)器各個(gè)指標(biāo)進(jìn)行監(jiān)控裹刮,如carte內(nèi)存使用情況音榜、cpu占用率、GC捧弃、服務(wù)器物理內(nèi)存等赠叼。
0x05 分布式
? ? 獨(dú)立部署的多臺(tái)slave server擦囊,可以組成一個(gè)類似分布式的架構(gòu),各個(gè)slave進(jìn)行搶占式執(zhí)行任務(wù)嘴办。實(shí)現(xiàn)邏輯:同一時(shí)刻多個(gè)slave同時(shí)提交同一個(gè)任務(wù)瞬场,在任務(wù)內(nèi)加唯一排他鎖校驗(yàn)。舉個(gè)例子涧郊,slave1和slave2同時(shí)提交任務(wù)A贯被,在A中先判斷有沒有實(shí)際開始執(zhí)行(比如查表中記錄),如果沒有執(zhí)行就往數(shù)據(jù)庫寫一條記錄底燎,任務(wù)繼續(xù)執(zhí)行;如果判斷A任務(wù)已經(jīng)開始執(zhí)行(比如從表中查到相關(guān)記錄)刃榨,任務(wù)就直接結(jié)束,不再處理后續(xù)業(yè)務(wù)双仍。? ??
? ? ? ?這個(gè)框架設(shè)計(jì)重點(diǎn)在唯一排他鎖校驗(yàn)枢希,借助數(shù)據(jù)庫表的主鍵特性也能實(shí)現(xiàn)這個(gè)功能: 假如任務(wù)id是表的主鍵,任務(wù)開始執(zhí)行時(shí)往表里插入id朱沃,后來的slave再插入這個(gè)任務(wù)id時(shí)就會(huì)異常苞轿,就不用再處理后面業(yè)務(wù)。
? ??缺點(diǎn):從任務(wù)角度看逗物,本質(zhì)上一個(gè)任務(wù)還是在一個(gè)服務(wù)上跑搬卒,這樣在執(zhí)行期間就存在單點(diǎn)問題,如果執(zhí)行任務(wù)的slave宕掉翎卓,之上的任務(wù)不能進(jìn)行故障轉(zhuǎn)移
? ? 優(yōu)點(diǎn):slave之間彼此獨(dú)立契邀,互不影響,如果單臺(tái)slave宕機(jī)失暴,不影響后續(xù)任務(wù)調(diào)度坯门,從整個(gè)集群來看是高可用的。而且多個(gè)任務(wù)平均分布到多臺(tái)slave上逗扒,也能達(dá)到負(fù)載均衡的效果
0x06 集群
????多臺(tái)slave server可以組成一個(gè)集群古戴,集群內(nèi)指定一個(gè)節(jié)點(diǎn)充當(dāng)master角色,其他節(jié)點(diǎn)是slave角色矩肩,kettle集群采用主從結(jié)構(gòu)现恼,由master統(tǒng)一提交任務(wù)。后續(xù)再寫文章細(xì)聊集群黍檩。
本文首發(fā)于公眾號(hào):data之道