簡介
Kettle 是一款由純Java語言開發(fā)的免費(fèi)開源的ETL工具,ETL即是Extract-Transform-Load的縮寫,用來描述將數(shù)據(jù)從來源端通過萃取(Extract)、轉(zhuǎn)換(Transform)、加載(Load)到目標(biāo)端的過程,通常用于數(shù)據(jù)清洗、數(shù)據(jù)遷移等.
下載地址:https:///projects/pentaho/files/
GitHub地址:https://github.com/pentaho/pentaho-kettle
Java doc地址:https://javadoc./
文檔地址:https://help./
轉(zhuǎn)換組件文檔:https://help./Documentation/8.2/Products/Data_Integration/Transformation_Step_Reference
作業(yè)組件文檔:https://help./Documentation/8.2/Products/Data_Integration/Job_Entry_Reference
安裝
JDK安裝
由于Kettle 是由Java語言開發(fā),因此,我們在安裝Kettle之前需要安裝Java運(yùn)行所需環(huán)境JDK
window環(huán)境中的安裝這里不再多做說明,只需要下載JDK的exe可運(yùn)行文件,一直點(diǎn)擊下一步即可安裝,安裝成功后再設(shè)置JAVA_HOME 環(huán)境變量即可,非常簡單
在Linux環(huán)境中,我們首先需要下載JDK的安裝文件,本篇博客中安裝的版本為JDK1.8
解壓文件
tar -xvf jdk-8u144-linux-x64.tar.gz -C /usr/local/java
配置環(huán)境變量vim /etc/profile ,編輯加入JDK路徑
export JAVA_HOME=/usr/local/java/jdk1.8.0_144 export PATH=$JAVA_HOME/bin:$PATH
編譯
source /etc/profile
查看是否安裝成功
[root@izbp1ad1jbc6ftdure2mpnz ~]# java -version Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
Kettle安裝
Kettle 實(shí)戰(zhàn)100篇系列博客下載的版本是當(dāng)前最新版本Pentaho 8.3
下載目錄地址:https:///projects/pentaho/files/Pentaho%208.3/client-tools/下的pdi-ce-8.3.0.0-371.zip
目前我們都是在Windows環(huán)境中使用Kettle 的Spoon 圖形化界面程序進(jìn)行ETL的開發(fā),
Kettle是用Java開發(fā)的純綠色版程序,因此我們只需要將下載的文件解壓到指定目錄即可,
我本機(jī)解壓目錄D:\Users\xiaoymin\Bin\data-integration\data-integration 8.3
解壓完成后,我們需要關(guān)注Kettle的幾個(gè)關(guān)鍵目錄和文件
- Spoon:這是Kettle為我們提供的Spoon圖形化界面啟動(dòng)程序,bat是在Windows環(huán)境下運(yùn)行,sh則是在 類似Unix環(huán)境中運(yùn)行,用于創(chuàng)建/編輯作業(yè)或者轉(zhuǎn)換
- Pan:我們通過Spoon創(chuàng)建了轉(zhuǎn)換或者作業(yè)后,如果是保存在本地磁盤的話,會生成響應(yīng)的文件,轉(zhuǎn)換文件是以
.ktr 結(jié)尾,而Pan 是轉(zhuǎn)換的命令行執(zhí)行程序, - Kitchen:作業(yè)文件以
.kjb 結(jié)尾,而Kitchen 是作業(yè)的命令行執(zhí)行程序 - Carte:輕量級的HTTP服務(wù)器(依托于Jetty實(shí)現(xiàn)),后臺的方式運(yùn)行,監(jiān)聽HTTP請求來運(yùn)行一個(gè)作業(yè).
Carte 也可用于分布式和協(xié)調(diào)跨機(jī)器執(zhí)行作業(yè),即Kettle集群方式. - lib:該目錄是Kettle依賴的第三方Jar包目錄,如果我們在使用Kettle進(jìn)行數(shù)據(jù)庫導(dǎo)入的話,此時(shí)如果Kettle中沒有該數(shù)據(jù)庫的驅(qū)動(dòng)Jar包時(shí),我們需要將從網(wǎng)站上下載的驅(qū)動(dòng)Jar放到該lib目錄下,然后重啟程序進(jìn)行調(diào)試,否則會報(bào)錯(cuò)(驅(qū)動(dòng)類不存在)
- Encr:上面我們所說的創(chuàng)建數(shù)據(jù)庫連接時(shí),我們需要輸入密碼,但是我們的密碼不能是明文,Encr工具為我們提供加密服務(wù)
核心
我們通過上面的步驟即可安裝成功Kettle,此時(shí)我們可以運(yùn)行Spoon程序創(chuàng)建轉(zhuǎn)換或者作業(yè),初始化界面如下:

Kettle中兩個(gè)核心的組件服務(wù):轉(zhuǎn)換和作業(yè)
- 轉(zhuǎn)換:轉(zhuǎn)換(transformation)是ETL解決方案中最主要的部分,它負(fù)責(zé)抽取、轉(zhuǎn)換、加載各個(gè)階段的數(shù)據(jù)操作處理,轉(zhuǎn)換包括一個(gè)或多個(gè)步驟,如讀取文件、請求REST接口、插入數(shù)據(jù)、過濾數(shù)據(jù)等等,各個(gè)步驟之間通過Hop連接,Hop代表的是一個(gè)單向的數(shù)據(jù)流通道.例如在上一個(gè)步驟中我們定義了變量user,那么我們在后面的步驟中則可以通過
${user} 的方式來獲取變量的值,通過:文件 -> 新建 -> 轉(zhuǎn)換用以創(chuàng)建轉(zhuǎn)換 - 作業(yè):作業(yè)(job)通常是一組轉(zhuǎn)換的集合,比如一個(gè)條件的判斷,參數(shù)的輪訓(xùn)執(zhí)行轉(zhuǎn)換,因?yàn)檗D(zhuǎn)換的執(zhí)行只能執(zhí)行一次,遇上分頁接口的轉(zhuǎn)換我們需要借助于作業(yè)的方式輪訓(xùn)執(zhí)行轉(zhuǎn)換以階級數(shù)據(jù)的抽取工作,在作業(yè)中可以對轉(zhuǎn)換的執(zhí)行成功發(fā)送郵件服務(wù)等,通過:文件 -> 新建 -> 作業(yè)用以創(chuàng)建作業(yè).
牛刀小試
由于本系列博客是以實(shí)戰(zhàn)為主,因此很多Kettle的概念會以實(shí)戰(zhàn)中的篇幅中介紹,不單獨(dú)說明,當(dāng)然,對于某些核心的組件會單獨(dú)再博客中說明
需求
我們訪問CSDN的博客RSS地址:https://blog.csdn.net/u010192145/rss/list,響應(yīng)內(nèi)容如下:

目前我們需要通過網(wǎng)絡(luò)訪問該RSS地址,然后解析XML最終輸出到Excel文件中,從XML中剝離出來id、標(biāo)題、發(fā)布時(shí)間、作者、簡介等字段
這個(gè)過程涉及到了請求RESTful地址,數(shù)據(jù)解析,數(shù)據(jù)轉(zhuǎn)換(輸出到Excel),因此我們通過Kettle中的轉(zhuǎn)換來實(shí)現(xiàn)此過程
實(shí)戰(zhàn)
生成記錄
從Kettle的轉(zhuǎn)換核心對象樹中拖拽生成記錄組件,定義url地址,如下圖:

REST client組件
第二步是需要用到REST client組件,幫助我們發(fā)送地址請求獲取得到XML的內(nèi)容,如下圖:

GET data from XML
我們通過REST組件請求得到了XML內(nèi)容,因此我們需要使用GET data from XML組件來接收,接收后定義輸出映射字段



Excel 輸出
通過上一個(gè)組件的字段映射定義,接下來我們就可以將請求得到的XML結(jié)果循環(huán)輸出到Excel中了,選擇對象樹中的Excel 輸出組件,設(shè)置相關(guān)屬性,如下圖:


運(yùn)行
整個(gè)轉(zhuǎn)換過程創(chuàng)建完后如下圖:

此時(shí),我們點(diǎn)擊Spoon界面的運(yùn)行按鈕,運(yùn)行我們的轉(zhuǎn)換,輸出日志:

此時(shí),我們打開已經(jīng)下載好的本地Excel文件,看是否將Xml的結(jié)果已經(jīng)導(dǎo)入到本地

至此,整個(gè)過程已經(jīng)完成了,如果你是開發(fā)人員的話,通過Kettle來完成此操作會大大提升你的工作效率
因?yàn)?假設(shè)您是一名Java開發(fā)人員,你需要用到的技術(shù)棧如下:
- HTTP客戶端請求技術(shù),例如:httpClient或者OKHttp或者JDK原生的HttpConnection組件
- Excel操作的相關(guān)技術(shù),例如POI
- XML操作的相關(guān)技術(shù),例如Dom4j
但是通過Kettle來操作的話,上面的技術(shù)棧我們就可以省略了(雖然我都會:),無奈~~~)
看到這里,您是否想躍躍欲試呢?

|