一、简介

开源的ETL工具,由java代码编写。

完成数据的抽取、转换、加载。

kettle被日立收购,更名为PDI(Pentaho Data Integration)。

二、PDI(kettle)的组成部分

名称描述
Spoon通过图形接口,用于编辑作业和转换的桌面应用。
Pan一个独立的命令行程序,用于执行由Spoon编辑的转换和作业。
Kitchen一个独立的命令行程序,用于执行由Spoon编辑的作业。
CarteCarte是一个轻量级的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 
提取码:03iq

3.2安装

3.2.1 安装JDK

官方下载地址:
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

百度网盘:
链接:https://pan.baidu.com/s/1XcOKeI4H7dWbWIYF2iYjJw 
提取码:hivh

3.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/bin

4.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秒。

标签: none

添加新评论