1. 程式人生 > >在Linux上部署使用kettle實現資料的時間戳增量同步(超詳細)

在Linux上部署使用kettle實現資料的時間戳增量同步(超詳細)

之前公司的資料同步都是在windows平臺上做的,同事告訴我用windows做資料同步的問題在於他的電腦不能關機,並且spoon必須一直保持開啟狀態,但他的kettle總會自己莫名掉線。於是,把資料同步這項工作從windows轉移到linux上是不可避免的也是必須的。我實現的方式並不是在Linux上安裝圖形化介面,而是很腦殘的一種方式:先在windows上實驗,然後修改.ktr檔案中的關於資料庫的連線資訊。我知道這是效率很低的一種實現方式,但由於我們公司屬性,生產區伺服器不能安裝圖形化介面,因此,出此下策,實在是迫不得已。好,廢話不多說,接下來進入步驟。

1:

首先在linux中安裝jdk,我的jdk的版本是1.8。我用測試服務區的伺服器裝過jdk 11,但用shell指令碼執行.ktr檔案時沒成功,報的錯誤也沒截圖,我不知道是由於jdk版本的問題還是我的環境變數配置有問題,我在shell指令碼中配置jdk 11的環境變數為:

export JAVA_HOME=/usr/java/jdk-11.0.1 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH

如果有問題,歡迎指正。

我的jdk 1.8版本的配置的環境變數為:

export JAVA_HOME=/usr/local/java export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

1.8版本的環境變數配置是沒有問題的,但請不要直接複製貼上,因為每個人jdk的安裝目錄不一樣,我的jdk是安裝在了local目錄下。除了第一行java_home不要直接複製,因人而異之外,第二行和第三行都是可以直接複製的。

另外,在data-integration目錄下的lib檔案下要把mysql連線驅動複製進去,這是必須的!!!我的版本是mysql-connector-java-5.1.47-bin.jar

2:

簡單說一下data-integration目錄下主要部分:pan.sh用來執行.ktr檔案,kitchen.sh用來執行.kjb檔案,spoon.bat用在windows上開啟圖形化介面,spoon.sh用在inux上開啟圖形化介面(不要在圖形化介面雙擊開啟,而是在命令列模式下用bash 來執行spoon.sh)。

3:

說一下在windows上用kettle做測試的細節。為什麼非要在windows上做測試呢?因為我們需要.ktr檔案,並且這個測試用的表名必須和正式做同步的表名一樣!!!切記!!!這也是最操蛋的地方了。這裡還有一個需要注意的問題就是再給流程命名的時候(比如:預設的表輸入,表輸出,插入/更新等等)一定不要用中文,要不然在linux上執行的時候會報編碼錯誤!!!

在windows上測試成功以後就是最重要的修改.ktr檔案的部分。這部分最主要的就是修改資料庫連線資訊,埠號。這個自己在.ktr檔案裡自己找就行。特別要注意的就是埠號,我們公司用的資料庫有mysql和Oracle等,他們的埠號都不一樣,這裡記得一定要保證埠號正確,保證.ktr檔案裡的所有埠號都修改正確。

4:

這一步就是把.ktr檔案複製到Linux中,我是在data-integration資料夾下又新建了三個資料夾,分別是transation,shell,job,log分別來儲存轉換,工作,shell指令碼和日誌,以便於管理。接下來就是編寫shell指令碼了,我給一下範例:

#!/bin/bash
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

/home/app/data-integration/pan.sh -file=/home/app/data-integration/transation/test.ktr > /home/app/data-integration/log/log.txt

前三行export就是配置環境變數,一定要保證這一步沒有錯誤,最後一行的意思就是用pan.sh執行test.ktr檔案,然後將日誌輸出到log.txt中。

5:

讓任務後臺執行:在命令列中輸入“crontab -e"進入,然後在最後一行加入以下內容:

* * * * * bash /home/app/data-integration/shell/test.sh

前面的五個*號代表什麼我不細講了,這裡需要注意的一點就是,一定要加上bash,用bash來執行test.sh。

總結:

這是我作為實習生身份所完成的第一個任務,稍微有點成就感。不說了,還有好多表需要我手動同步呢。