一、需求背景
由于项目场景原因,需求将A库(MySQL)中的表a、表b、表c中的数据守时T+1
增量
的同步到B库(MySQL)。这儿阐明一下,不是数据库的主从备份,便是普通的数据同步。经过技术调研,发现Kettle挺合适的,原因如下:
- Kettle (数据抽取、清洗、转化、装载)是由java 编写,能够在 Window、Linux、Unix 上运转。支撑多数据源, 多种中间件的专业ETL 工具;
- 可视化界面支撑图形化GUI规划界面,组件多样性,支撑组件拖拉拽,不必写额定的代码;
- Kettle的流程图本质上都是装备文件,如.ktr/.kjb文件。这种规划的优点便是,当我们把转化流程图像完之后,能够直接仿制到别的一个环境中运转,如:在Windows电脑上画好流程图,仿制到Liunx体系上运转。
- 免费、组件多、支撑开源,一般处理T+1的数据同步是没有问题的。假如并发高、实时性高、数据量大就主张运用Flink了。
二、运用方法
1. 安装包下载
官网地址:sourceforge.net/projects/pe…
2. 发动方法
Windows点击Spoon.bat发动
出现以下图片表明正在发动,假如一直没有反应,运用管理员身份运转
。
主界面如下:
三、衔接MySQL数据库
1. 预备MySQL衔接驱动jar包
由于Kettle自身是不带任何数据库驱动包的,所以这儿我们需求先自己预备好驱动包,版本最好挑选5.1.49
。下载好jar包后,拷贝到lib目录下(Windows和Linux同理)。假如已经发动了Kettle,则需求关掉重新发动,否则驱动包不会被加载。
2. 创立数据源
顺次点击:转化——>主对象树——>DB衔接——>点击新建——>测验
同上操作,创立好两个数据源:源数据库、目标库;目的便是将源数据库中的表数据同步到目标库中去
3. 装备转化流程
① 加入输入节点:转化——>输入——>表输入
② 双击输入节点翻开装备页,输入一下信息
这儿由于我是守时T+1
增量
同步数据,所以我加了个同步条件WHERE gmt_create >= CURDATE()
表明该数据创立时刻大于当天才会进行查询。
点击预览,正好有一条数据
③加入转化节点:转化——>插入/更新——>按住shift建立衔接
④ 双击插入/更新节点,翻开装备页
⑤ 点击运转测验
四、仿制ktr文件到Liunx上守时运转
在Linux上,ktr文件运用Kettle的pan.sh脚本运转,指令大致如下:
sh /home/admin/kettle/data-integration/pan.sh -file=/home/admin/kettle/ktr/table_transfer.ktr -norep
。一起为了实现守时履行这个脚本,我打算用Linux自带的corntab功用设置守时。
首要我编写了一个shell脚本,命名为cornSql.sh,用于保存ktr的履行指令,内容如下:
#!/bin/bash
export KETTLE_HOME=/home/admin/kettle/data-integration
export JAVA_HOME=/usr/java/jdk1.8.0_131
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin:${KETTLE_HOME}
export JRE_HOME=${JAVA_HOME}/jre
TIME=$(date "+%Y%m%d")
sh /home/admin/kettle/data-integration/pan.sh -file=/home/admin/kettle/ktr/table_transfer.ktr -norep >>/home/admin/kettle/log/transfer-"$TIME".log
其次,将ktr脚本拷贝到指定目录下,也便是/home/admin/kettle/ktr目录下。然后输入crontab -e
翻开指令界面,输入0 1 * * * /home/admin/kettle/cornSql.sh
,这句话的意思是每天清晨1点守时履行cornSql.sh脚本。
为了查看守时装备是否收效,这儿能够运用 crontab -l -u root
指令,假如刚才的守时指令有打印出来,则证明装备收效。
最后,第二天查看一下履行日志文件有没有生成,在/home/admin/kettle/log目录下,这儿我把每天履行的日期打印出来了,如下图: