Kettle笔记
1.Kettle的安装,CARTE-子服务器,Repo数据源
1.1 Kettle的安装
从官网网站http://www.kettle.net.cn/ 即可下载zip压缩包,下载完压缩包,解压即可
1.2 Kettle的启动
解压后,在data-integration目录下windows系统打开spoon.bat ,Linux系统打开spoob.sh即可启动

Spoon.bat,集成开发环境。提供了一个图形化用户界面,用于创建或者编辑作业或者转换。Spoon也可以用于执行或者调试作业或者转换,它也有性能监控的功能。
Kitchen.bat,作业的命令行运行程序,可以通过Sheel脚本来调用。Scheel脚本一般通过调度程序,如cron或者Windwos计划任务,来调度执行。
Pan.bat,转换的命令运行程序,和Kitchen一样通过Sheel脚本来调用。执行转换而不是作业。
Carte.bat:轻量级的Http服务器(基于Jetty),后台运行,监听Http请求来运行一个作业。Carte用于分布式和协调跨机器执行作业,也就是Kettle的集群。(重要)
1.2 CARTE-子服务器
carte主要的配置环境是在Linux环境下,所以要将其更换为Linux的安装教程
将安装包,放置在/目录下,并解压
集群环境下的单节点,启动carte,首先进入/data-integration文件夹
cd /data-integration/pwd 进入该文件夹,会有几个已经有的Carte-config.xml文件

carter-config-master-8080.xml 就是主服务器
carter-config-8081.xml 等其余3个就是从服务器,如果需要增加更多的从服务器,只需要按照里面的样例,照着写就可以了
打开一个主服务器的xml文件

从服务器的xml文件

回到/data-integration 文件夹
./carte.sh localhost 8080 就会在shell中启动一个web ,ip是localhost 端口是8080 ,表示启动主服务器carte
./carte.sh localhost 8081 启动一个从服务器

等待启动,看到如下图就是启动成功

# 很关键的一点是,要先在pwd文件夹写入该配置文件,再启动Carte脚本启动web监控页面,监控该节点的运作
启动完成之后,就可以在任何一个可ping通192.168.240.133的win10系统中的浏览器内输入192.168.240.133:8081 查看到页面
用户名和密码就是pwd文件夹中的.conf配置文件中的username,password

进入如下页面就说明,服务器就已经启动了

Show status 就可以查看运行在该节点的作业和转换任务

然后现在在中心机win系统 /data-integration 启动Spoon.bat 图形化界面,在linux就是就是Spoon.sh

新建一个job或者transfer任务,在子服务器下右键新建一个服务器

这里就是配置刚才启动的carte服务,与启动的carte服务器配置源文件内的内容一致

点击确定后,就会在子服务器列表中出现配置的服务器

再点击Run configurtion 文件夹,右键新建

重新命名Name

配置完成,准备好要运行的任务,再点击运行


运行完成,或者正在运行,就可以在web上看到这个任务。

点击任务,再点view,就可以看到详细的过程

详细的任务

1.3Repo数据库连接
![image-20201026155549665]kettle\image-20201026155549665.png)
点击connection -》repository manager







默认登录的账户密码都是admin
2.基本操作,数据库抽数据库导成文件,或者如到其他数据库
2.1Kettle的基本操作出现的问题、解决方法
2.1.1当出现数据库连接异常的时候比如
Driver class 'org.gjt.mm.mysql.Driver' could not be found, make sure the 'MySQL' driver (jar file) is installed.
org.gjt.mm.mysql.Driver

说明当前的kettle项目内没有mysql驱动,需要手动的安装Mysql驱动包,这里安装的Mysql驱动jar包,最好版本不要过高,会出现要求时区的error,所以最好使用5.1.X的版本
比如 mysql-connector-java-5.1.15-bin.jar
将jar包放入kettle项目目录的lib目录下即可
2.1.2 A表数据转到B表数据,出现中文乱码解决方案
如果A库A表,转到B库B表,出现了转换到B表后中文乱码,且B数据库里面设置的charset就是utf8的情况,那么就需要在输入表中设置characterEncoding=utf8即可
如图所示


这样即可解决utf8编码乱码情况
2.1.3 kettle报错:Unexpected problem reading shared objects from XML file:null
原因是:在测试环境下。将表输出进行了共享。然后删除了共享。这一些列操作后,发生错误了

打开shared.xml

2.1.4 Carte web页面任务中文乱码的解决方式
当carte进行一个任务的时候,会将其显示在carte管理页面内,但是如果任务名字有中文就会出现乱码,乱码情况如下

解决方式是:
在/data-integration 目录下编辑carte.bat 文件
增加
OPT= -Dfile.encoding=utf-8

2.2 A库A表的数据转到B库B表
首先需要A库A表和B库B表的数据结构都是一样的,拿student表来做测试
create table student(
id not null auto_increment comment '主键id',
name varchar(20) not null comment '姓名',
age int not null comment '年龄',
address varchar(50) not null comment '地址',
primary key(id)
);
插入测试数据
insert into student values (1,'noko',12,'上海杨浦区');
insert into student values (2,'jond',20,'湖南省怀化市');
insert into student values (3,'Mkow',35,'广东省深圳市');


数据库的数据准备好后,就进入kettle进行操作,在Spoon界面,新建一个转换



点击新建数据库连接

配置完成,点击确定,再写入sql语句。

点击预览,可以看到如下数据

说明从数据库拉取到了数据,现在配置表的输出


配置表的输出步骤,双击工作界面的表输出步骤,出现弹窗

配置数据库连接的方式,与之前一样,如图所示

连接好后


确定后出现如下界面,点击确定即可


然后按住shift键,鼠标从输入拖到输出,就会出现节点连接,如图所示

现在点击运行即可



查看btest数据库的student表

3.远程FTP拉到本地,再读入到本地数据库
开启Linux下的vsftp systemctl start vsftpd.service
停止Linux下的vsftp systemctl stop vsftpd.service
1.首先通过机器远程通过ftp连接
首先安装ftp,一般的linux都没有自带ftp的
yum install -y vsftpd //ftp占用的端口是21
进入之后需要更改配置文件 cd /etc/vsftpd
里面会有3个文件
ftpuers 里面是黑名单,不允许连接的用户
user_lists 是白名单,允许连接的用户
vsftpd.conf 配置文件
配置文件需要进行修改的地方有:
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=NO
# allow_writeable_chroot=YES 需要添加的一行
chroot_list_file=/etc/vsftpd/chroot_list
这时候可以注释掉黑名单里面的root,方便测试,或者新建其他用户
如果出现550错误,则使用
getsebool -a | grep ftp

都是关闭的话,就需要打开
setsebool -P allow_ftpd_full_access on
setsebool -P tftp_home_dir on
2.再通过ftp拉取文件到本地
ftp的传输就是一个job,首先创建一个job





设置完,点击确定,就可以从远程虚拟上拉取数据了
4.AB两台机器各有一个Kettle,A机器开启B机器
另外一台机器开起来,只能通过Carte来开启
1.首先设置好Carte对应的配置文件
2.通过远程调用sh脚本来开启Carte.sh
5.主从kettle JVM配置
5.1 调整JVM大小
要修改JVM大小进行性能调优,就要修改Kettle根目录下Spoon脚本,如果是linux环境下,就修改Spoon.sh文件

参数参考:
-Xmx2048m:设置JVM最大可用内存为2048M。
-Xms1024m:设置JVM初始内存为1024M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 老年代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小老年代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
6.调优
1. JVM调优
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步骤)

浙公网安备 33010602011771号