Kettle作為用戶規(guī)模最多的開源ETL工具,強大簡潔的功能深受廣大ETL從業(yè)者的歡迎。但kettle本身的調度監(jiān)控功能卻非常弱。 連Pentaho官方都建議采用crontab(Unix平臺)和計劃任務(Windows平臺)來完成調度功能。所以大家在實施kettle作業(yè)調度功能的時候,通常采用以下幾種方式:使用spoon程序來啟動Job,使用crontab或計劃任務,自主開發(fā)java程序來調用kettle的類庫。下面分析這幾種調度方式的利弊。 一、spoon 程序調用Job(kjb作業(yè)): 該方式是kettle原生的調度方式,實現(xiàn)了基本的定時調度功能。比如按月,周,日,時點的方式來啟動。并且執(zhí)行速度很快。但是對于ETL作業(yè)來說,其本質是后臺數(shù)據(jù)處理邏輯,卻要必須保持spoon桌面程序一直運行。 無論從ETL平臺穩(wěn)定性來說,還是自動化管理標準來說,都非常不適宜。所以一般來說企業(yè)是不會選擇此方案。
二、官方建議的crontab或計劃任務: 該方式是目前比較流行的方案。對于一般用戶來說,系統(tǒng)自帶的時間計劃可以滿足基本的調度功能需求。但是對于復雜的調度邏輯,比如依賴、互斥、自定義條件分支,錯誤重試、斷點續(xù)跑等高級調度特性,就無法應對了。 由于是采用系統(tǒng)外部命令來調用kettle作業(yè),所以每次調起一個轉換或作業(yè)的時候,就會消耗大量的時間(>10秒)來初始化一個新的kettle運行環(huán)境。在并行調用多個kettle作業(yè)的時候,特別是調用數(shù)據(jù)資源庫里的作業(yè),容易引起系統(tǒng)級別的錯誤,帶來不穩(wěn)定性。 另外初始化kettle運行環(huán)境實際就是啟動一個JVM進程。如果多個kettle作業(yè)同時運行,很容易把系統(tǒng)內(nèi)存撐爆。筆者測試過通過此方式同時運行5個轉換(簡單文本操作)就把2GB的內(nèi)存撐爆了。所以此方式不太適合并行調用kettle作業(yè)。 大家試想一下,如果我們有1000個作業(yè)需要調用。那計劃任務腳本應該怎么寫呢?我們應該怎么維護呢?顯而易見的是,隨著作業(yè)數(shù)的增多,維護成本將會成倍增加。 我們費盡心力,寫了長長的腳本程序,終于把這1000個作業(yè)調起了!正在為后臺自動化調度的成功實施而自喜的時候,結果領導又安排了新的任務:我要監(jiān)控一下作業(yè)的運行情況和日志哦......
三、自主開發(fā)java程序來調kettle類庫。 領導不是要監(jiān)控作業(yè)的運行情況和日志么?我自認為java水平還不錯。大不了我寫一個web應用來讀取資源庫的日志信息吧。并且之前的調度方式效率太低了,我用java程序模擬spoon環(huán)境來調kettle類庫。這樣子效率也提高,這肯定是一個不錯的方案。調度功能不強大?采用oozie吧,挺流行的... 算算工期6個人月?嗯...還是再考慮考慮吧。 總而言之,打算采用自主開發(fā)java調kettle的話,不是一個小工程,還是得當成單獨項目來立項吧。
難道就沒有其它敏捷適用的方案了嗎?其實在ETL調度領域,TASKCTL早就實現(xiàn)了對kettle作業(yè)實時調度監(jiān)控管理了。并且在最新的版本中,直接調用kettle核心,調度效率大幅度提升!我們來看看使用TASKCTL調度kettle到底有哪些優(yōu)勢: 1、完整的調度核心:可以實現(xiàn)關系(依賴互斥、串并引用)策略,排程計劃策略,容錯策略,自定義策略。怎么調都可以。 2、企業(yè)級特性:支持跨平臺、分布式、高可靠。無論是linux上還是windows上面的kettle作業(yè),都能統(tǒng)一監(jiān)控管理。 3、靈活的人工干預:人工運行任意流程分支,對作業(yè)流程實現(xiàn)斷點,暫停。對作業(yè)實現(xiàn)強制通過,重跑等。 4、效率大幅提升:經(jīng)筆者測試:運行60次同樣的ktr。 采用傳統(tǒng)的pan來調大約耗時:21分15秒(無法并行,并行即報錯)。而采用TASKCTL來調,則耗時不到5秒(并行度為20) 5、全方位實時監(jiān)控:采用實時刷新、圖形、多角度多口徑統(tǒng)計以及短信等方式對整個平臺作業(yè)進行全方位監(jiān)控,以便用戶及時掌握哪些作業(yè)正在運行、錯誤原因、失敗、警告等信息
TASKCTL說得這么好。到底好不好用?安裝方便不方便呢?ok,我們來部署一套試試吧。 如果您有一定的linux基礎的話。整個步驟30分鐘之內(nèi)就能搞定咯。
|