PDI(kettle)使用指南
一、简介
开源的ETL工具,由java代码编写。
完成数据的抽取、转换、加载。
kettle被日立收购,更名为PDI(Pentaho Data Integration)。
二、PDI(kettle)的组成部分
| 名称 | 描述 |
|---|---|
| Spoon | 通过图形接口,用于编辑作业和转换的桌面应用。 |
| Pan | 一个独立的命令行程序,用于执行由Spoon编辑的转换和作业。 |
| Kitchen | 一个独立的命令行程序,用于执行由Spoon编辑的作业。 |
| Carte | Carte是一个轻量级的Web容器,用于建立专用、远程的ETL Server。 |
三、PDI(kettle)的安装部署-Windows系统
3.1下载PDI(kettle)
官方网站:https://www.hitachivantara.com/zh-cn/products/data-management-analytics/pentaho-platform/pentaho-data-integration.html
百度网盘:
链接:https://pan.baidu.com/s/1oL6UP7bPs2tqafRO9I8YZA
提取码:03iq3.2安装
3.2.1 安装JDK
官方下载地址:
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
百度网盘:
链接:https://pan.baidu.com/s/1XcOKeI4H7dWbWIYF2iYjJw
提取码:hivh3.2.2 解压缩PDI(kettle)
默认解压后文件夹名称为data-integration。
3.2.3 运行spoon.bat(Windows系统下)
四、PDI(kettle)的安装部署-Linux系统
4.1上传并解压缩PDI(kettle)
4.2 安装JDK1.8
配置JDK环境变量
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin4.3 安装依赖
webkitgit
1.下载webkitgit
webkitgtk-2.4.9-1.el7.x86_64.rpm
2.使用yum install安装
yum install -y webkitgtk-2.4.9-1.el7.x86_64.rpm
#通过yum安装其他依赖包否则运行./kitchen.sh是会出现如下提示:
#######################################################################
WARNING: no libwebkitgtk-1.0 detected, some features will be unavailable
Consider installing the package with apt-get or yum.
e.g. 'sudo apt-get install libwebkitgtk-1.0-0'
#######################################################################4.4 验证安装
进入PDI目录
./kitchen.sh
#执行kitchen.sh,显示版本号及帮助提示。五、必要设置
5.1 安装mysql的JDBC驱动
MySQL官方下载地址:https://www.mysql.com/cn/products/connector/
百度网盘
链接:https://pan.baidu.com/s/1ckI_Cwz3gRlkEmDF17a3og
提取码:cg3x将mysql的JDBC驱动jar包,复制到data-integration\lib目录下。
ps:如PDI(kettle)已经启动,需要重启。
5.2中文乱码问题
在数据库连接-->选项,添加命名参数。
characterEncoding uft8六、Linux下执行转换和作业
6.1执行作业
需要在PDI目录下
./pan.sh -file=/home/kettle_jobs/sync_data.ktr >> /home/kettle_job/log/tf.jog &
#执行转换,并输出日志,同时后台运行。6.2执行作业
./kitchen.sh -file=/home/kettle_jobs/sync_data.kjb >> /home/kettle_job/log/job.jog
#执行作业,并输出日志。
nohup ./kitchen.sh -file=/home/kettle_jobs/sync_data.kjb >> /home/kettle_job/log/job.jog &
#执行作业,并输出日志,同时后台运行。6.3 定时任务
6.3.1 Linux定时任务执行
cromtab -e
1 * * * * /usr/local/kettle/kirchen.sh -file=/home/kettle_jobs/sync_db_smart_bookreader/jobs_sync_db_smart_bookreader.kjb >> /home/kittle_jobs/log/job.log &
#一分钟执行一次作业。6.3.2 使用kitchen自动调度
nohup /usr/local/kettle/kitchen.sh -file=/home/kettle_jobs/sync_db_smart_bookreader/jobs_sync_db_smart_bookreader.kjb >> /home/kittle_jobs/log/job.log &
#作业启动命令。不输出屏幕,保存到日志中。
#调度器设置为定时
<entry>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<start>Y</start>
<dummy>N</dummy>
<repeat>Y</repeat>
<schedulerType>1</schedulerType>
<intervalSeconds>5</intervalSeconds>
<intervalMinutes>0</intervalMinutes>
<hour>12</hour>
<minutes>0</minutes>
<weekDay>1</weekDay>
<DayOfMonth>1</DayOfMonth>
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>368</xloc>
<yloc>176</yloc>
<attributes_kjc/>
</entry>
#作业的start设置为每5s执行一次6.3.3 SHELL脚本执行(待验证)
#!/bin/bash
is_runing=1
while (( $is_runing==1 ))
do
/usr/local/kettle/pan.sh -file=/home/kettle_jobs/sync_smart_bookreader/sync_db_smart_bookreader.ktr >> /home/kettle_jobs/smart_bookreader/log/tf.log &
sleep 5s
done七、实例一:增量同步
7.1 通过时间戳进行同步,每次同步后记录同步的时间,下次同步的时候读取上次同步的时间,只同步这个时间点后产生的新数据。
7.2 可以建立一个记录同步时间的表,专门用来存储每次更新时间。
7.3 SQL语句参考
7.3.1.获取上一次的同步时间。
SELECT MAX(sync_time) as sync_time FROM sync_log;
#获取sync_log表中的sync_time字段最大值,作为字段sync_time的结果。7.3.2.根据上一次的同步时间,获取同步时间之后的数据。
SELECT * FROM stu1 WHERE insert_time>('${SYNC_TIME}');
#获取所有inset_time字段大于上次更新时间的数据。7.3.3.记录本次同步的时间。
INSERT INTO sync_log(`table`,`result`,`sync_time`) VALUES ('stu1','1',SYSDATE());
#在同步日志表里新增时间戳记录
UPDATE sync_log set sync_time = DATE_ADD(NOW(),INTERVAL -10 SECOND) WHERE id = '1';
#更新同步时间戳。
DATE_ADD(NOW(),INTERVAL -10 SECOND)
#获取当前系统时间,并向前取10秒。