kettle實現oracle遷移至mysql


公司有需求將兩張業務表從oracle遷移至mysql,表的數據量大概3000W左右,在對比了各種遷移方法后,決定使用kettle。

Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。kettle的數據抽取主要在於抽取數據,而沒有考慮數據庫的函數、存儲過程、視圖、表結構以及索引、約束等等,如果想對這些內容進行遷移,就需要通過寫腳本或者更改kettle源碼的方式實現了。

一、安裝java 環境

參考:https://www.cnblogs.com/nothingonyou/p/11936850.html 

二、部署kettle

官網下載較慢,這里選擇國內鏡像下載,使用的是pdi-ce-7.1.0.0-12.zip 版本。

官網地址:https://community.hitachivantara.com/s/article/data-integration-kettle

下載地址:http://mirror.bit.edu.cn/pentaho/Data%20Integration/7.1/

解壓后進入到Kettle目錄,雙擊運行spoon.bat文件,出現如下界面及說明kettle成功部署。

 1. 數據庫連接驅動 

在運行之前,我們需要下載對應數據庫的jar包導入到Kettle的lib目錄下,比如我們需要把oracle遷移到mysql,那就需要oracle和mysql兩個jar包:

2. 配置kettle轉換

雙擊打開spoon.bat,在左側主對象菜單欄,新建一個轉換,命名為o2m,如下圖:

 2.1配置oracle和mysql連接

DB連接一欄,右擊新建連接,配置oracle連接:

 點擊測試,顯示成功即為配置完成

 配置mysql連接:

點擊測試,顯示成功即為配置完成

 2.2 配置字符集

遷移時要確認兩邊數據庫使用的是哪種字符集,不然可能會出現遷移后出現亂碼的問題,我這里oracle是16GBK,mysql是UTF-8,UTF-8兼容16GBK,故沒有配置。

 2.3 配置遷移步驟

在左側菜單欄【轉換】里面,選擇【核心對象】,【輸入】一欄接着雙擊【表輸入】,或者選中將【表輸入】拖拽到右側空白區域。

 雙擊你拖進來的【表輸入】,修改“步驟名稱”,選擇源數據,點擊獲取【獲取SQL查詢語句】,選擇你想同步的表,點擊確定后就可以了。當然也可以自己寫sql語句,我這里是自己寫的sql,點擊【預覽】可以查看要遷移的數據。

 接下來配置表輸出,在左側菜單欄【轉換】里面,選擇【核心對象】,【輸出】一欄接着雙擊【表輸出】,或者選中將【表輸出】拖拽到右側空白區域。

單擊【表輸入】,按shift鍵連接【表輸入】,建立起【表輸入】和【表輸出】的連接,如圖:

 雙擊【表輸出】,配置要遷移的目標表,我這里兩邊數據庫字段一樣,故而可以不用修改,如圖:

 ctrl+s保存為o2m.ktr文件,到這里一個簡單的轉換就配置完成了。

2.4 運行轉換

手工運行作業,點擊下圖紅色圈圈里面的按鈕。

 點擊啟動,日志級別這里可以選擇錯誤日志,這樣只記錄錯誤信息

 轉換輸出欄如下圖:

 最后檢測兩邊表,如記錄數count(*)、表中數據對比等沒問題的話表示轉換完成。

2.5 kettle運行的一些優化

本地跑kettle速度不是很給力,查了資料做了些優化。

2.5.1 修改JVM內存大小

JVM初始分配的內存由-Xms指定,默認是物理內存的1/64;JVM最大分配的內存由-Xmx指 定,默認是物理內存的1/4。默認空余堆內存小於 40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆內存大於70%時,JVM會減少堆直到-Xms的最小限制。因此服務器一般設置-Xms、 -Xmx相等以避免在每次GC 后調整堆的大小。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行堆內存設置,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值,建議堆的最大值設置為可用內存的最大值的80%。
本機內存8G,修改spoon.bat 相關參數如下:

 修改完效率不是很高,但是略微能提升一點讀寫性能。

2.5.2  表輸出設置多線程

表輸入和表輸出都可以設置多線程,但是【表輸入】開啟多線程容易造成數據重復,比如select *  from table設置為3,就會遷移3份重復數據,故只設置表輸出:

 

 數字8就代表開啟了8個輸出線程,開啟后速度明顯提升不少。

 2.5.3 修改輸出參數

mysql表輸出的時候出現減速的原因可能是因為網絡鏈接的屬性設置

在此處添加參數:

useServerPrepStmts=false  
rewriteBatchedStatements=true  
useCompression=true 

如圖:

 以上就是在windows上使用kettle的一些心得,但是考慮到表數據量太大,故而后續把kettle轉換配置放在linux 服務器跑了,速度得到大大提升,將在下一篇說明。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM