企业级增量抽取数据模型(Kettle版)

>>最全面的Java面试大纲及答案解析(建议收藏)  

最近在使用Kettle进行ETL的工作,现在总结一下。需求是将MYSQL中的表数据增量备份到HIVE仓库中,第一次是全量。我只想给大伙来点实用的,避免大家踩坑。Kettle是一个基于图形化的ETL工具,也可以用于集成各种作业,比如Sqoop,MR,Hive这些,越来越多的企业在使用。

提示:文末有云盘下载链接,含代码及相关资料。

本文大纲:

       1、Kettle的安装与配置

       2、库表数据的准备

       3、Kettle增量抽取数据模型

       4、测试与验证

       5、部署到Linux上运行

       6、总结

1、Kettle的安装与配置

1.1 下载安装包,解压

到Kettle官网下载:https://community.hitachivantara.com/docs/DOC-1009855,目前最新的是8.0版本。(pdi-ce-8.0.0.0-28.zip),下载后解压到任意目录。注意与自己的JDK搭配上,我的JDK是1.8。如果你的是1.7,则下载Kettle的7.0版本。

 

1.2 配置环境变量

配置Kettle的工作目录,即KETTLE_HOME,指向自己解压后的目录。

企业级增量抽取数据模型(Kettle版)

 

1.3 修改Kettle的配置文件

       配置完环境变量后,进入Kettle的主目录,点击Spoon.bat,即可启动。同时你在主目录下会发现多了一个.kettle目录,里面有kettle.properties文件。

请将下面的内容修改为你自己的相应环境,然后拷贝到kettle.properties文件里。主要用于后面的增量数据抽取模型。

第一部分:数据仓库路径,你得在集群中安装好Hive。

第二部分:Hadoop集群的配置,你得安装一个Hadoop集群。

第三部分:我们的数据源,我们需要抽取哪个库的数据。

第四部分:我们抽取数据需要写一些Log,将Log存储到数据库中。

第五部分:kettle转换和作业的存放地址。

 

企业级增量抽取数据模型(Kettle版)

企业级增量抽取数据模型(Kettle版)

 

1.4 添加Hadoop的配置文件到Kettle大数据插件中

将Hadoop集群中的hdfs-site.xml和core-site.xml文件拷贝到${KETTLE_HOME}pluginspentaho-big-data-pluginhadoop-configurationscdh512目录下。

 

1.5 将MYSQL的驱动包拷贝到Kettlelib目录下

${KETTLE_HOME}lib。

2、库表数据的准备

2.1 数据源数据

创建一个待抽取数据的数据库和表。数据库请按照自己在Kettle配置文件所配置的进行创建,在执行下面的创表脚本。

 

企业级增量抽取数据模型(Kettle版)

添加一些测试数据。

企业级增量抽取数据模型(Kettle版)

 

2.2 Log日志表

我们需要将抽取数据的Log记录到数据库中。数据库请按照自己在Kettle配置文件所配置的进行创建,在执行下面的创表脚本。

 

企业级增量抽取数据模型(Kettle版)

2.3 Hive

创建Hive表,先创建一个名为rds的数据库,在建表。该表的字段与数据源的表类似,在此添加了一个数据加载时间,是为了区分记录。

 

企业级增量抽取数据模型(Kettle版)

3、Kettle增量抽取数据模型

       下面的这些作业和转换请保持在kettle配置文件中指定的路径下。

3.1设置作业变量

企业级增量抽取数据模型(Kettle版)

3.1.1获取上次抽取记录数

是为了判断是否是第一次抽取,若是第一次则全量抽取,否则增量抽取。

 

企业级增量抽取数据模型(Kettle版)

点击编辑,$是读取kettle配置文件中的变量值。

企业级增量抽取数据模型(Kettle版)

设置环境变量

企业级增量抽取数据模型(Kettle版)

 

3.1.2获取上次抽取时间

是为了实现增量抽取,从上次抽取结束时间到当前时间为增量数据。

企业级增量抽取数据模型(Kettle版)

设置上次数据抽取时间到变量中。

 

企业级增量抽取数据模型(Kettle版)

 

3.1.3获取系统当前时间

是为了增量抽取数据,取得当前的时间。

 

企业级增量抽取数据模型(Kettle版)

设置当前时间

企业级增量抽取数据模型(Kettle版)

3.2 抽取数据保存到Hive

企业级增量抽取数据模型(Kettle版)

 

3.2.1抽取mysql数据中的数据

抽取MYSQL数据源中的数据,使用is_load判断是否是第一次抽取,否则增量抽取。按照数据表数据更新时间进行过滤。is_load,before_time,curr_time都是前面设置的变量。

企业级增量抽取数据模型(Kettle版)

点击编辑,配置数据源。

企业级增量抽取数据模型(Kettle版)

3.2.2动态生成文件名

这个文件名需要动态生成,因为不同的数据表保存到Hive的路径是不同的,Hive中表的数据是会根据表名创建一个目录,我们将数据保存到该目录下,就可以使用Hive SQL查询了,无需格外在进行一次load data导入。

注意:但这不是内部表,是外部表,只不过我们把数据放在而已。

 

企业级增量抽取数据模型(Kettle版)

3.2.3获取数据仓库路径

这个路径是我们在kettle配置文件中配置的。

 

企业级增量抽取数据模型(Kettle版)

3.2.4 生成数据入库时间

为每条数据增加一个字段,数据入库时间,即数据加载的时间。

企业级增量抽取数据模型(Kettle版)

3.2.5 生成数据仓库最终保存路径

将数据仓库路径加上文件名就是一个完整的HDFS路径。

企业级增量抽取数据模型(Kettle版)

3.2.6 保存数据到Hive

这里我们选择从字段中获取文件名,因为文件名是动态的,不能写死,否则以后你的工作量就线性增加了。

 

企业级增量抽取数据模型(Kettle版)

点击Edit。配置我们的Hadoop集群信息。

企业级增量抽取数据模型(Kettle版)

点击测试。显示下图,表示成功。

企业级增量抽取数据模型(Kettle版)

退回第一个弹出的窗口,点击内容。

企业级增量抽取数据模型(Kettle版)

点击字段。点击获取字段,点击最小宽度,将时间字段都设置为字符串,指定格式。不必要的字段可以删除。

企业级增量抽取数据模型(Kettle版)

3.3 保存本次数据抽取时间

 

企业级增量抽取数据模型(Kettle版)

 

3.3.1生成唯一主键

企业级增量抽取数据模型(Kettle版)

3.3.2获取当前时间

企业级增量抽取数据模型(Kettle版)

3.3.3 设置字段值

企业级增量抽取数据模型(Kettle版)

3.3.4记录当次数据抽取时间

企业级增量抽取数据模型(Kettle版)

点击编辑。配置你的Log日志使用的数据库。

企业级增量抽取数据模型(Kettle版)

点击下方的数据字段。选择合适的字段。

企业级增量抽取数据模型(Kettle版)

3.4 建立一个JOB作业

企业级增量抽取数据模型(Kettle版)

添加一个转换,指向我们的“设置作业变量”转换所在的路径。其他两个类似,不在描述。

企业级增量抽取数据模型(Kettle版)

4、测试与验证

上面的工作都准备完成后,进行测试和验证。

 

企业级增量抽取数据模型(Kettle版)

 

查看HDFS是否有生成相应的文件。

企业级增量抽取数据模型(Kettle版)

在Linux的命令行窗口输入hive  -e  "select * from rds.test" 查看数据结果。

企业级增量抽取数据模型(Kettle版)

查看log表

企业级增量抽取数据模型(Kettle版)

接下来我们测试一个增量抽取。在数据源表中添加一条新的数据。

企业级增量抽取数据模型(Kettle版)

重新点击运行这个job,查看HDFS。

企业级增量抽取数据模型(Kettle版)

在Linux的命令行窗口输入hive  -e  "select * from rds.test" 查看数据结果。

企业级增量抽取数据模型(Kettle版)

查看Log表

企业级增量抽取数据模型(Kettle版)

5、部署到Linux上运行

我们的ETL作业最终都是部署到Linux平台运行的,Kettle提供了kitchen.sh命令来让我们在后台运行JOB。在Linux平台上要安装Kettle,同时也要配置KETTLE_HOME,修改配置文件,改一下那些路径,知道我为什么把路径都配置起来了吧。

比如,可以写一个shell脚本,再让crontab来定时执行,也就是完整的企业级的ETL了。你也可以使用Azkaban或者Oozie来调度,看公司需求了。

企业级增量抽取数据模型(Kettle版)

6、总结

简单总结一下,这是使用Kettle进行增量抽取数据的一个完整实例,也是熟悉Kettle的第一步,kettle还可以做很多其他事情,越来越受欢迎了,不妨学习一下。为了减少你的时间,我把案例的所有资料都上传到云盘了,kettle的那些作业和转换直接引入就可以使用了,可能也要调整一下。

感谢您的阅读,谢谢。

 

本文章及相关资料下载:

链接:https://pan.baidu.com/s/1MUAXfbLZCCxJLuMzjf_bwQ 密码:1mwy

始发于微信公众号: Java框架源码分析