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

image-20201026155646333

image-20201026155926324

img

img

img

img

img

默认登录的账户密码都是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

image-20201023155315135

说明当前的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即可

如图所示

image-20201027102709279

image-20201027102819068

这样即可解决utf8编码乱码情况

2.1.3 kettle报错:Unexpected problem reading shared objects from XML file:null

原因是:在测试环境下。将表输出进行了共享。然后删除了共享。这一些列操作后,发生错误了

image-20201027103244837

打开shared.xml

image-20201027103357516

2.1.4 Carte web页面任务中文乱码的解决方式

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

image-20201027121118919

解决方式是:

在/data-integration 目录下编辑carte.bat 文件

增加

OPT= -Dfile.encoding=utf-8

img

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,'广东省深圳市');

image-20201029104344789

image-20201029104442890

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

image-20201029104714833

image-20201029104815627

image-20201029105137977

点击新建数据库连接

image-20201029105622206

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

image-20201029105931178

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

image-20201029110001062

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

image-20201029110156128

image-20201029110207712

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

image-20201029110254411

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

image-20201029110418237

连接好后

image-20201029110548516

image-20201029110616738

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

image-20201029110633666

image-20201029110835318

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

现在点击运行即可

image-20201029111052187

image-20201029111257686

image-20201029111326461

查看btest数据库的student表

image-20201029111618674

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

image-20201026154559653

都是关闭的话,就需要打开

setsebool -P allow_ftpd_full_access on

setsebool -P tftp_home_dir on

2.再通过ftp拉取文件到本地

ftp的传输就是一个job,首先创建一个job

img

img

img

img

img

设置完,点击确定,就可以从远程虚拟上拉取数据了

4.AB两台机器各有一个Kettle,A机器开启B机器

另外一台机器开起来,只能通过Carte来开启

1.首先设置好Carte对应的配置文件

2.通过远程调用sh脚本来开启Carte.sh

5.主从kettle JVM配置

5.1 调整JVM大小

要修改JVM大小进行性能调优,就要修改Kettle根目录下Spoon脚本,如果是linux环境下,就修改Spoon.sh文件

image-20201027135937063

参数参考:

-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步骤)
posted @ 2021-02-20 00:03  宇。  阅读(383)  评论(0)    收藏  举报