【Kettle】Kettle入門解析(五)
【Kettle】Kettle入門解析(五)
一、資源庫
【1】資料庫資源庫
1、概述
資料庫資源庫是將作業和轉換相關的資訊儲存在資料庫中,執行的時候直接去資料庫讀取資訊,很容易跨平臺使用
2、使用
準備操作:在MySQL中建立資料庫kettle
1)點選右上角connect,選擇Other Resporitory
2) 選擇Database Repository
3) 建立新連線,選擇我們之前建立的資料庫kettle
4) 填好之後,點選finish,會在指定的庫中建立很多表,至此資料庫資源庫建立完成
5) 連線資源庫,預設賬號密碼為admin
6) 將之前做過的轉換匯入資源庫
(1)選擇從xml檔案匯入
(2)隨便選擇一個匯入即可
7) 此時在C:\Users\你的windows使用者名稱
.kettle
資料夾,裡面包含了一些Kettle資源庫的配置資訊
【2】檔案資源庫
將作業和轉換相關的資訊儲存在指定的目錄中,其實和XML的方式一樣
建立方式跟建立資料庫資源庫步驟類似,只是不需要使用者密碼就可以訪問,跨
平臺使用比較麻煩
1)選擇connect
2)點選add後點擊Other Repositories
3)選擇File Repository
4)填寫資訊
二、Kettle在Linux下的使用
前提:因為Kettle是純Java編寫,所以依賴JDK環境,使用前必須安裝JDK
1)安裝包上傳到伺服器,解壓
注意:
- 1.把mysql驅動拷貝到lib目錄下
- 2.將Windows本地使用者家目錄下的隱藏目錄
C:\Users\你的windows使用者名稱\.kettle
/home/zsy/
下
2)執行資料庫資源庫中的轉換:
./pan.sh -rep=resources -user=admin -pass=admin -trans=mysql2file -dir=/
引數說明:
-rep 資源庫名稱
-user 資源庫使用者名稱
-pass 資源庫密碼
-trans 要啟動的轉換名稱
-dir 目錄(不要忘了字首 /)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4)執行資源庫裡的作業:
記得把作業裡的轉換變成資源庫中的資源 ./kitchen.sh -rep=resources -user=admin -pass=admin -job=jobDemo1 -logfile=./logs/log.txt -dir=/ 引數說明: -rep - 資源庫名 -user - 資源庫使用者名稱 -pass – 資源庫密碼 -job – job名 -dir – job路徑 -logfile – 日誌目錄
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
三、調優
1、調整JVM大小進行效能優化,修改Kettle根目錄下的Spoon指令碼
引數參考:
- -Xmx1024m:設定JVM最大可用記憶體為1024M
- -Xms512m:設定JVM促使記憶體為512m。此值可以設定與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配記憶體
- -Xmn2g:設定年輕代大小為2G。整個JVM記憶體大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代後,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8
- -Xss128k:設定每個執行緒的堆疊大小。JDK5.0以後每個執行緒堆疊大小為1M,以前每個執行緒堆疊大小為256K。更具應用的執行緒所需記憶體大小進行調整。在相同實體記憶體下,減小這個值能生成更多的執行緒。但是作業系統對一個程序內的執行緒數還是有限制的,不能無限生成,經驗值在3000~5000左右
2、 調整提交(Commit)記錄數大小進行優化,Kettle預設Commit數量為:1000,可以根據資料量大小來設定Commitsize:1000~50000
3、儘量使用資料庫連線池
4、儘量提高批處理的commit size
5、儘量使用快取,快取儘量大一些(主要是文字檔案和資料流)
6、Kettle是Java做的,儘量用大一點的記憶體引數啟動Kettle
7、可以使用sql來做的一些操作儘量用sql ;Group , merge , stream lookup,split field這些操作都是比較慢的,想辦法避免他們.,能用sql就用sql
8、插入大量資料的時候儘量把索引刪掉
9、儘量避免使用update , delete操作,尤其是update,如果可以把update變成先delete, 後insert
10、能使用truncate table的時候,就不要使用deleteall row這種類似sql合理的分割槽,如果刪除操作是基於某一個分割槽的,就不要使用delete row這種方式(不管是deletesql還是delete步驟),直接把分割槽drop掉,再重新建立
11、儘量縮小輸入的資料集的大小(增量更新也是為了這個目的)
12、儘量使用資料庫原生的方式裝載文字檔案(Oracle的sqlloader, mysql的bulk loader步驟)
13、儘量不要用kettle的calculate計算步驟,能用資料庫本身的sql就用sql ,不能用sql就儘量想辦法用procedure,實在不行才是calculate步驟
14、要知道你的效能瓶頸在哪,可能有時候你使用了不恰當的方式,導致整個操作都變慢,觀察kettle log生成的方式來了解你的ETL操作最慢的地方
15、遠端資料庫用檔案+FTP的方式來傳資料,檔案要壓縮。(只要不是區域網都可以認為是遠端連線)