第一次寫博客,心里有點小激動,肯定有很多需要改進的地方,望海涵。
kettle算是我相對較為深入研究過的開源軟件了,也是我最喜歡的開源軟件之一,它可以完成工作中很多體力勞動,在ETL數據抽取方面得到了廣泛的使用。我本身對kettle的各個控件使用也不是很熟悉,只會使用最常見的部分控件,就是這樣簡單的使用也被它的美深深的吸引住了。
好了,進入正題,這里假設你熟悉java開發、git一般使用、kettle一般使用。kettle源碼之前托管在kettle官方的svn上,后來遷移到了github上,在github上的地址是:https://github.com/pentaho/pentaho-kettle,建議注冊自己的github賬戶,然后將kettle項目fork一份到自己用戶下,接着進入工作目錄(如:E:/workspace)使用如下命令將代碼克隆到本地。
git clone https://github.com/pentaho/pentaho-kettle
下載代碼的同時你可以到:http://community.pentaho.com/projects/data-integration/ 這個地址下載最新的kettle發布版。都下載完成后按以下步驟最終可以成功運行kettle源碼。建議使用jdk7或以上版本。
- 在eclipse導入已經存在的項目,將core、engine、ui、DB Dialog、和kettle項目本身導入eclipse,如下圖所示,其他關閉的項目可以不用導入。
- 在eclipse中創建User Libraries(用戶庫),將下載的可運行的kettle目錄下的lib目錄全部添加到該用戶庫中,然后移除其中core、engine、ui、DB Dialog等四個jar包,再將libswt\win32目錄下的swt.jar加入該用戶庫中,具體如下圖所示。
- 然后依次右鍵上述導入的項目選擇bulid path,將上一步創建的用戶庫加入類路徑中,然后engine、ui、DB Dialog三個項目都依賴core,ui還要依賴engine、DB Dialog兩個項目,最后還有主項目依賴上述四個項目和kettle用戶庫,如下圖所示。
- assembly下的package-res添加為源文件如下圖所示。
- 這下應該就可以成功運行kettle了,如下方式運行:
- kettle源碼運行結果
上述就是我運行kettle源碼的方式,方式肯定有很多,這種方式應該不算難,特別是依賴jar的解決,kettle使用的是ant管理項目的,一來我平常都是使用maven管理項目,對ant不太熟悉,二來ant方式很多jar包根本下載不到。
這里只是為了分享下自己運行kettle源碼的方式,說實話剛接觸kettle源碼時真沒運行起來,隔了好長一段時間后再次嘗試才成功運行的。若想用上述方式運行又覺得麻煩的可以先按上述方式創建好以kettle命名的用戶庫。然后從我的github上下載配置好的kettle項目,理論上下載下來就可以用。方式如下:
- 按上面的步驟下載kettle安裝包后在eclipse中創建好用戶庫。
- 從https://github.com/ma459006574/pentaho-kettle.git 這個地址clone代碼到本地,切換到my_run分支再導入eclipse就可以了。與官方的差別只在各項目的.classpath文件,你也可以對比差異自行配置。
后續我將介紹kettle源碼結構,分享部分kettle控件改進,還會將自己定制化開發kettle(將kettle的部分功能封裝到web應用中)的過程中寫的kettle定制開發工具類分出來,大家一起進步。
下面是在使用kettle過程中覺得需要改進的地方:
- excel 07版支持不好,07版excel兩種解析工具效果都不好,poi大文件會內存溢出。
- excel輸入控件獲取sheet時本可以直接獲取,結果弄得比較復雜。
- poi streaming存在bug,會占用文件。
- poi streaming以string讀取時間時為數字。
- poi streaming部分列為空時數據錯亂。
- 抽取ui部分方法為工具類,方便web定制開發。
- 數據庫只要連接失敗一次,后面即使數據恢復正常,kettle的連接也一直失敗了。可以改為設置定時重連,涉及面較廣。
- rar壓縮文件的處理,解壓控件新增選項:保留目錄結構,默認勾選,不勾選則全部文件解壓到指定目錄。
- 解壓控件的解壓成功后移動到指定目錄和刪除文件功能有bug,他是對設定的根目錄操作。
- zip解壓中文目錄亂碼問題,kettle使用的是jdk自帶解壓工具類,暫時修改vfs的jar,新增編碼設置,jdk6不支持設置編碼,需要升級到jdk7。
- 壓縮控件支持加密,可以更換zip解壓工具為zip4j,可統一設置密碼,也可從上一個流中獲取。
- 添加操作zookeper控件,可以監控節點變化等。
- ftp下載控件檢測目錄存在時,中文目錄都會失敗,因為檢測目錄時並沒有使用用戶設定的編碼。
- job開始那個定時應加一個選項,job開始先運行一次,之后再按設定的時間運行。
- InsertUpdate 288~293行無用代碼。
- 測試分析后台kettle運行十幾個job性能就很差了及性能優化。因為數據庫資源庫讀取轉換太慢了。
- xbaseinput當沒有文件時沒有設置輸出結束,導致后面的步驟一直等待。
- 新增字典翻譯控件,支持緩存字段表,同時翻譯多個字段。