数据集成工具的使用---Kettle 从理论学习到熟练使用
Posted 北慕辰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据集成工具的使用---Kettle 从理论学习到熟练使用相关的知识,希望对你有一定的参考价值。
本期与大家分享的是,小北精心整理的大数据学习笔记,数据采集工具Kettle 的详细介绍,希望对大家能有帮助,喜欢就给点鼓励吧,记得三连哦!欢迎各位大佬评论区指教讨论!
💜🧡💛制作不易,各位大佬们给点鼓励!
🧡💛💚点赞👍 ➕ 收藏⭐ ➕ 关注✅
*💛💚💙欢迎各位大佬指教,一键三连走起!往期好文推荐:
🔶🔷数据集成工具的使用(一)—Sqoop 从理论学习到熟练使用
🔶🔷数据集成工具的使用(二)—DataX 从理论学习到熟练使用
🔶🔷数据集成工具的使用(三)—FlinkX 从理论学习到熟练使用
🔶🔷数据集成工具的使用(四)—Flume 从理论学习到熟练使用
一、Kettle概述
1、什么是kettle
Kettle是一款开源的ETL工具,底层是纯Java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。
2、Kettle工程存储方式
(1)以XML形式存储
(2)以资源库方式存储(数据库资源库和文件资源库)
3、Kettle的两种设计
4、Kettle的组成
5、kettle特点
二、kettle安装部署和使用
Windows下安装
(1)概述
在实际企业开发中,都是在本地环境下进行kettle的job和Transformation开发的,可以在本地运行,也可以连接远程机器运行
(2)安装步骤
1、安装jdk
2、下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可
3、双击Spoon.bat,启动图形化界面工具,就可以直接使用了
Kettle简单使用
案例1:mysql to MySQL
把stu1的数据按id同步到stu2,stu2有相同id则更新数据
1、在mysql中创建kettle_test数据库,并创建两张表
create database kettle_test;
use kettle_test;
create table stu1(id int,name varchar(20),age int);
create table stu2(id int,name varchar(20));
2、往两张表中插入一些数据
insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18), (1003,'wangwu',23);
insert into stu2 values(1001,'wukong');
3、把pdi-ce-8.2.0.0-342.zip文件拷贝到win环境中指定文件目录,解压后双击Spoon.bat,启动图形化界面工具,就可以使用了
进入Kettle主界面:
在data-integration\\lib文件下添加mysql驱动
在数据库连接栏目点击 新建,填入mysql相关配置,并测试连接
建立连接后,选择刚刚建好的连接,填入SQL,并预览数据:
以上说明stu1的数据输入ok的,现在我们需要把输入stu1的数据同步到stu2输出的数据
注意:拖出来的线条必须是深灰色才关联成功,若是浅灰色表示关联失败
转换之前,需要做保存
执行成功之后,可以在mysql查看,stu2的数据
案例2:使用作业执行上述转换,并且额外在表stu2中添加一条数据
1、新建一个作业
2、按图示拉取组件
3、双击Start编辑Start
4、双击转换,选择案例1保存的文件
5、在mysql的stu1中插入一条数据,并将stu2中id=1001的name改为wukong
6、双击SQL脚本编辑
7、加上Dummy,如图所示:
8、保存并执行
9、在mysql数据库查看stu2表的数据
三、创建资源库
1、数据库资源库
数据库资源库是将作业和转换相关的信息存储在数据库中,执行的时候直接去数据库读取信息,方便跨平台使用
在MySQL中创建kettle数据库
点击主界面右上角connect,选择Other Resporitory
选择Database Repository
建立新连接
填好之后,点击finish,会在指定的库中创建很多表,至此数据库资源库创建完成
连接资源库
默认账号密码为admin
将之前做过的转换导入资源库
-
点击 ->文件->选择从xml文件导入
-
点击保存,选择存储位置及文件名
-
查看MySQL中kettle库中的R_TRANSFORMATION表,观察转换是否保存
2、文件资源库
将作业和转换相关的信息存储在指定的目录中,其实和XML的方式一样
创建方式跟创建数据库资源库步骤类似,只是不需要用户密码就可以访问,跨
平台使用比较麻烦
-
选择connect
-
点击add后点击Other Repositories
-
选择File Repository
-
填写信息
四、 Linux下Kettle安装使用
1、单机模式
-
jdk安装
-
安装包上传到服务器,并解压
注意:
-
把mysql驱动拷贝到lib目录下
-
将windows本地用户家目录下的隐藏目录C:\\Users\\自己用户名\\.kettle 目录,
整个上传到linux的用户的家目录下,root用户的家目录为/root/
-
-
运行数据库资源库中的转换:
cd /usr/local/soft/data-integration
./pan.sh -rep=my_repo -user=admin -pass=admin -trans=tran1
参数说明:
-rep 资源库名称
-user 资源库用户名
-pass 资源库密码
-trans 要启动的转换名称
-dir 目录(不要忘了前缀 /)(如果是以ktr文件运行时,需要指定ktr文件的路径)
- 运行资源库里的作业:
记得把作业里的转换变成资源库中的资源
记得把作业也变成资源库中的资源
cd /usr/local/soft/data-integration
mkdir logs
./kitchen.sh -rep=my_repo -user=admin -pass=admin -job=job1 -logfile=./logs/log.txt
参数说明:
-rep - 资源库名
-user - 资源库用户名
-pass – 资源库密码
-job – job名
-dir – job路径(当直接运行kjb文件的时候需要指定)
-logfile – 日志目录
2、 集群模式
-
准备三台服务器
master作为Kettle主服务器,服务器端口号为8080,
node1和node2作为两个子服务器,端口号分别为8081和8082。
-
安装部署jdk
-
hadoop完全分布式环境搭建
-
上传并解压kettle的安装包至
/usr/local/soft/
目录下 -
进到/usr/local/soft/data-integration/pwd目录,修改配置文件
- 修改主服务器配置文件carte-config-master-8080.xml
<slaveserver> <name>master</name> <hostname>master</hostname> <port>8080</port> <master>Y</master> <username>cluster</username> <password>cluster</password> </slaveserver>
- 修改从服务器配置文件carte-config-8081.xml
<masters> <slaveserver> <name>master</name> <hostname>master</hostname> <port>8080</port> <username>cluster</username> <password>cluster</password> <master>Y</master> </slaveserver> </masters> <report_to_masters>Y</report_to_masters> <slaveserver> <name>slave1</name> <hostname>node1</hostname> <port>8081</port> <username>cluster</username> <password>cluster</password> <master>N</master> </slaveserver>
- 修改从配置文件carte-config-8082.xml
<masters> <slaveserver> <name>master</name> <hostname>master</hostname> <port>8080</port> <username>cluster</username> <password>cluster</password> <master>Y</master> </slaveserver> </masters> <report_to_masters>Y</report_to_masters> <slaveserver> <name>slave2</name> <hostname>node2</hostname> <port>8082</port> <username>cluster</username> <password>cluster</password> <master>N</master> </slaveserver>
-
分发整个kettle的安装目录,通过scp命令
-
分发/root/.kettle目录到node1、node2
-
启动相关进程,在master,node1,node2上分别执行
[root@master]# ./carte.sh master 8080 [root@node1]# ./carte.sh node1 8081 [root@node2]# ./carte.sh node2 8082
-
访问web页面
http://master:8080
五、Kettle调优
1、调整JVM大小进行性能优化,修改Kettle根目录下的Spoon脚本。
参数参考:
-Xmx2048m:设置JVM最大可用内存为2048M。
-Xms1024m:设置JVM促使内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
2、 调整提交(Commit)记录数大小进行优化,Kettle默认Commit数量为:1000,可以根据数据量大小来设置Commitsize:1000~50000
3、尽量使用数据库连接池;
4、尽量提高批处理的commit size;
5、尽量使用缓存,缓存尽量大一些(主要是文本文件和数据流);
6、Kettle是Java做的,尽量用大一点的内存参数启动Kettle;
7、可以使用sql来做的一些操作尽量用sql;
Group , merge , stream lookup,split field这些操作都是比较慢的,想办法避免他们.,能用sql就用sql;
8、插入大量数据的时候尽量把索引删掉;
9、尽量避免使用update , delete操作,尤其是update,如果可以把update变成先delete, 后insert;
10、能使用truncate table的时候,就不要使用deleteall row这种类似sql合理的分区,如果删除操作是基于某一个分区的,就不要使用delete row这种方式(不管是deletesql还是delete步骤),直接把分区drop掉,再重新创建;
11、尽量缩小输入的数据集的大小(增量更新也是为了这个目的);
12、尽量使用数据库原生的方式装载文本文件(Oracle的sqlloader, mysql的bulk loader步骤)。
以上是关于数据集成工具的使用---Kettle 从理论学习到熟练使用的主要内容,如果未能解决你的问题,请参考以下文章