之前公司的数据同步都是在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。

总结:

这是我作为实习生身份所完成的第一个任务,稍微有点成就感。不说了,还有好多表需要我手动同步呢。