Kettle入門及性能優化FAQ

一、安裝java

配置Java環境mysql

Java環境配置問題sql

java_home:D:\Program Files\Java\jdk1.7.0_25(安裝jdk路徑)shell

classpath:.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar數據庫

path:在path路徑中添加%java_home%\bin;%java_home%\jre\bin;windows

kettle_home:D:\Program Files\data-integration(安裝kettle路徑)性能優化

----------------------------------------------------------------------------------------------------------------------------服務器

rac環境下網絡

方式一app

1、不須要填寫主機名

2、數據庫名寫以下鏈接字符串:

 (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = xx.xxxx.edu.cn)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = xxxdb)))

三、端口號寫:-1

方式二

對於10g以上版本數據庫在錄入數據庫名稱時加/區分服務名和實例名。斜槓加服務名如/oadb則識別爲鏈接到服務名,冒號或者不加符合加實例名如:dci&&dci則識別爲實例名

二、啓動

資源庫模式默認用戶名密碼都是admin/admin

三、字符集問題

一、解決字符集問題

只能在表輸出加哦

二、mac

數據庫鏈接在選項中添加characterEncoding=utf-8,資源庫鏈接時也必需要加上這個,不然在Mac下中文會亂碼

四、閃退問題

一、檢查jdk是否安裝完成,這裏jdk必須爲1.8及以上(在屢次實踐中發現,jdk9和jdk10使用起來並不穩定,這裏咱們強烈推薦使用jdk1.8,不然在後期使用過程當中會出現很是多莫名奇妙的錯誤);

--------------------- --------------------- --------------------- --------------------- --------------------- ---------------------

查看jdk版本方法:win+R----->cmd----->java -version

------------------------------------- --------------------- --------------------- --------------------- --------------------- -----

查看安裝的路徑java -verbose 

查看最後一行 

二、修改一下spoon.bat文件

 if "%PENTAHO_DI_JAVA_OPTIONS%"=="" setPENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m""-XX:MaxPermSize=256m"

 改成

 if "%PENTAHO_DI_JAVA_OPTIONS%"=="" setPENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx512m""-XX:MaxPermSize=256m"

------------------------------------------ --------------------- --------------------- --------------------- ---------------------  

五、性能優化

一、SPOON 啓動時候內存較小,在spoon.bat這個啓動文件中,配置的有JVM的內存XMX,("%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="- Xms8192m" "-Xmx8192m" "-XX:MaxPermSize=4096m"),默認這個是256M,512M  256M, 其中Xms是指JVM初始分配的堆棧的內存,Xmx是指JVM分配的堆棧的內存 (JAVA代碼能涉及到的存儲數據變量的內存)最大是多少,因此XMS必需要<= XMX,XX:MaxPermSize,是指JVM給本身分配的非堆棧內存(供虛擬機程序本身開銷)個人因 爲是在服務器上跑,所以改爲了8192M\8192M\4096M,這個改不能是無限的加大,須要考慮總的內存大小,通常來講網上參考是最大堆棧內存不超過總內存的3/8有的也說是 一半,總之得有個度。

二、mysql表輸出的時候出現減速的緣由多是由於網絡連接的屬性設置

在此處添加參數:

 

useServerPrepStmts=false  

rewriteBatchedStatements=true  

useCompression=true 

三、插入流程中數據COMMIT過程太頻繁,數據插入的COMMIT太頻繁也是很影響效率的,30W的數據提交300次和提交30次速度顯然是不同的,只要你的設置的內存能暫時容得下插入的數據,COMMIT能夠儘可能設高一點(kettle有限制不能超過50000)

四、針對kettle執行過程出現Couldn't get row from result set  Io異常:Socket read timed out

緣由:出現這個問題緣由多是MySQL數據庫設置的wait_timeout太短(缺省爲8小時),因爲MySQL服務在長時間不鏈接以後斷開了,斷開以後的首次請求會拋出這個異常

解決辦法:

以root用戶登陸MySQL,首先查看wait_timeout:

>show global variables like'wait_timeout';

根據實際狀況,設置wait_timeout比以前的時間長一點

>set global wait_timeout=864000;

五、若是是經過Linux或者windows命令行下執行腳本的話,

Error in step, asking everyone to stopbecause of:Error looking up row in database

The last packet successfully received fromthe server was 59,903,094 milliseconds ago.The last packet sent successfully to the server was 59,903,094 milliseconds ago. is longerthan the server configured value of 'wait_timeout'. You should consider either expiring and/or testingconnection validity before use in your application,increasing the server configured valuesfor client timeouts, or using the Connector/J connection property'autoReconnect=true' to avoid this problem.

org.pentaho.di.trans.steps.insertupdate.InsertUpdate.processRow(InsertUpdate.java:307)

org.pentaho.di.trans.step.RunThread.run(RunThread.java:40)

java.lang.Thread.run(Thread.java:745)

緣由:出現這個問題緣由和上面的緣由是同樣的:MySQL數據庫設置的wait_timeout太短

六、Kettle增量同步數據的五種方式

增量抽取經常使用的捕獲變化數據的方法

 1:觸發器(又稱快照式)---會下降源數據庫的性能,因此通常不會採起

 介紹:在抽取的表上創建須要的觸發器,通常要創建插入,修改,刪除三個觸發器,每當源表中的數據發生變化,就被相應的觸發器將變化的數據寫入一個臨時表,抽取線程

 從臨時表中抽取數據,臨時表中抽取過的數據被標記或是刪除。

 ----------------------------------------------------------------------------------------------------------------------------

 增量抽取時的觸發器創建,針對三種觸發器,如何寫入臨時表,如何從臨時表中抽取,如何標記或者刪除臨時表數據。

 ----------------------------------------------------------------------------------------------------------------------------

  優勢:數據抽取的性能高,ETL加載規則簡單,速度快,不須要修改業務系統表結構,能夠實現數據的遞增長載。

  缺點:要求業務系統創建觸發器,對業務系統有必定的影響,容易對源數據庫構成威脅。(會下降數據庫的性能,因此通常不採用)

 2:時間戳方式(比較經常使用)

 介紹:它是一種基於快照比較的變化數據捕獲方式,在源表上增長一個時間戳字段,系統中更新修改表數據的時候,同時修改時間戳字段的值。當進行數據抽取時,經過比較上次

 抽取時間與時間戳字段的值來決定抽取那些數據。有的數據庫的時間戳支持自動更新,即表的其餘字段的數據發生變化時,自動更新時間戳字段。有的數據庫不支持時間戳的自動

 更新,這就要求業務系統在更新業務數據時,手工更新時間戳字段。

 ---------------------------------------------------------------------------------------------------------------------------

 經過什麼方式來更新時間戳,如何比較抽取時間與源表時間戳字段,如何決定抽取那些數據,如何實現抽取。

 ---------------------------------------------------------------------------------------------------------------------------

 優勢:同觸發器方式同樣,時間戳方式的性能也比較好,ETL系統設計清晰,源數據抽取相對清楚簡單,能夠實現數據的遞增長載。

 缺點:時間戳維護須要由業務系統完成,對業務系統有很大的傾入性(加入額外的時間戳字段),特別是對不支持時間戳的自動更新的數據庫,還要求業務系統進行額外的更新時間戳

 操做;另外,沒法捕獲對時間戳之前數據的delete和update操做,在數據準確上受到必定的限制。

 3:全表刪除插入方式

 介紹:每次ETL操做均刪除目標表數據,由ETL全新加載數據。

 優勢:ETL加載規則簡單,速度快。

 缺點:對於維表加外鍵不合適,當業務系統產生刪除數據時,綜合系統將不會記錄到所刪除的歷史數據,不能夠實現數據的遞增長載;同時對於目標表所創建的關聯關係,須要從新

 進行加載。

 4:全表比對方式---性能較差

 介紹:全表比對的方式是ETL工具事先爲要抽取的表創建一個結構相似的臨時表,該臨時表記錄源表主鍵以及根據全部字段的數據計算出來,每次進行數據抽取時,對源表和臨時表

 進行比對,若有不一樣,進行update操做,若目標表沒有該主鍵值,表示該記錄尚未,則進行insert操做。

 優勢:對已有系統的表結構不產生影響,不須要修改業務操做程序,全部抽取工做由ETL完成,管理維護統一,能夠實現數據的遞增長載,沒有風險。

 缺點:ETL比較複雜,設計比較複雜,速度較慢,與觸發器和時間戳的主動通知的方式不一樣,全表比對方式是被動的進行全表數據比較,性能較差,當表中沒有主鍵或爲一列且含有

 重複記錄時,全表對比方式的準確性較差。

 5:日誌表方式---較爲麻煩

 介紹:在業務系統中添加系統日誌表,當業務數據發生變化時,更新維護日誌表內容,看成ETL加載時,經過讀日誌表數據決定加載那些數據及如何加載。

 優勢:不須要修改業務系統表結構,源數據抽取清楚,速度較快,能夠實現數據的遞增長載。

 缺點:日誌表維護須要由業務系統來完成,須要對業務系統業務操做程序作修改,記錄日誌信息,日誌表維護較爲麻煩,對原有系統有較大影響,工做量大,改動較大,有必定的風險 。

七、Windos環境下利用windos服務作定時任務

一、資源庫爲數據庫

建立啓動文件,用於被windows任務計劃程序調用

  新建文本文件,重命名爲 "每日9點執行.bat",文件右鍵編輯,以文本文件方式打開,而後複製下面內容進去,保存。

1 D:

2 cd D:\pdi-ce-6.0.0.0-353\data-integration

3 kitchen.bat -rep:XXX -dir:/ -job:"XXX" -user:XXX -pass:XXX -level:Basic -log:D:\kettlebat\log\每日9點執行%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt

 注:第一行D:到第三行的kitchen.bat爲打開Kettle的Kitchen.bat,該文件通常在Kettle的根目錄,請根據實際保存路徑修改。

-rep:後的XXX修改成資源庫名稱,-job:後的XXX修改成要執行的做業名稱,-user:和-pass:後的XXX爲資源庫的賬號密碼,

-level爲日誌級別,共有Basic, Detailed, Debug, Rowlevel, Error, Nothing六種級別,此處使用Basic,其它級別自行測試,

-log後爲日誌保存路徑,路徑中的%date和%time是在建立日誌的時候給日誌名添加上時間。

例:

二、資源庫爲文件夾

 

例:

c:

cd C:\kettle\pdi-ce-8.2.0.0-342\data-integration      

pan.bat /rep local /trans test1 -level=basic>C:\kettle\test1.LOG

三、後臺運行

頭部加上:

@echo off

if "%1" == "h" goto begin

mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)

(window.close)&&exit

:begin

::

下一步打開計算機管理:作windos觸發器

compmgmt.msc,回車肯定,自行搜索教程,很easy.

 FAQ:

一、不刷資源庫,須要更新升級IE11(https://support.microsoft.com/zh-cn/help/2847882/prerequisite-updates-for-internet-explorer-11調試環境)

二、flagfield標誌字段:設置標誌字段的名稱,標誌字段用於保存比較的結果,比較結果有下列幾種。

  1. 「identical」 – 舊數據和新數據同樣

  2. 「changed」 – 數據發生了變化;

  3. 「new」 – 新數據中有而舊數據中沒有的記錄

  4. 「deleted」 –舊數據中有而新數據中沒有的記錄

三、全文比對同步

特此備註下:合併記錄以前先進行排序

  1. 舊數據和新數據須要事先按照關鍵字段排序。 

  2. 舊數據和新數據要有相同的字段名稱。 

四、驅動問題

  1. 解決for input string"4294967295"錯誤

 

最後的解決方案是把其餘驅動刪掉,只留下ojdbc14,把ojdbc4放在lib/swt下

 2. 沒法鏈接mysql數據庫

 

經測試,kettle8.2可兼容使用的mysql最新驅動爲mysql-connector-java-5.1.46-bin.jar

請務必注意驅動版本號,不然仍是會報找不到驅動的錯誤。

相關文章
相關標籤/搜索