1. 程式人生 > 實用技巧 >【Kettle】Kettle入門解析(五)

【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
    資料夾上傳到linux的使用者家目錄下,我的是/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的方式來傳資料,檔案要壓縮。(只要不是區域網都可以認為是遠端連線)


都看到這裡了,點贊評論一下吧!!!