目录
一、什么是Kettle?
ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程,数据清洗),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种etl工具的使用,必不可少。
kettle是纯java编写,支持图形化的GUI设计界面,然后可以以工作流的形式流转,在做一些简单或复杂的数据抽取、质量检测、数据清洗、数据转换、数据过滤等方面有着比较稳定的表现,其中最主要的我们通过熟练的应用它,减少了非常多的研发工作量,提高了我们的工作效率。
Kettle概念
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。
Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。
Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。
二、Kettle核心知识点
1、Kettle工程存储方式
1) 以XML形式存储
2) 以资源库方式存储(数据库资源库和文件资源库)
2、Kettle的两种设计
3、kettle组成
4、安装
1) 安装jdk
2) 下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可
3) 双击Spoon.bat,启动图形化界面工具,就可以直接使用了
三、案例操作
案例一 需求:把stu1的数据按id同步到stu2,stu2有相同id则更新数据
注意:如果需要连接mysql数据库,需将mysql的连接驱动包复制到kettle的根目录下的lib目录中,否则会报错找不到驱动。
案例二 需求:使用作业执行上述转换,并且额外在表student2中添加一条数据
案例三:需求:将hive表的数据输出到hdfs
案例四:需求:读取hdfs文件并将sal大于1000的数据保存到hbase中
四、资源库
1、数据库资源库是将作业和转换相关的信息存储在数据库中,执行的时候直接去数据库读取信息,很容易跨平台使用
2、将作业和转换相关的信息存储在指定的目录中,其实和XML的方式一样创建方式跟创建数据库资源库步骤类似,只是不需要用户密码就可以访问,跨平台使用比较麻烦
五、Linux下使用
1、单机模式
(1)jdk安装、安装包上传到服务器,解压
(2)配置文件 C盘的.kettle文件夹放在linux用户的根目录下
注意:1. 把mysql驱动拷贝到lib目录下
(1)运行数据库资源库中的转换:
[hdp-2@hdp-2 data-integration]$./pan.sh -rep=my_resp -user=admin -pass=admin -trans=stu1tostu2 -dir=/
-rep 资源库名称 -user -pass 资源库帐号密码(默认都是admin)
-trans 要启动的转换名称 -dir 存放在资源库的目录(不要忘了前缀 /)
(2)运行资源库里的作业:
[root@hdp-2 data-integration]$./kitchen.sh -rep=my_rep -user=admin -pass=admin -job=insert -logfile=./logs/log.txt -dir=/
参数说明:
-job – job名 -logfile – 日志目录
2、集群模式
(1)上传解压kettle的安装包以及资源库
(2)进到/opt/module/data-integration/pwd目录,修改配置文件
#修改主服务器配置文件carte-config-master-8080.xml
<slaveserver>
<name>master</name>
<hostname>hadoop102</hostname>
<port>8080</port>
<master>Y</master>
<username>cluster</username>
<password>cluster</password>
</slaveserver>
#修改从服务器配置文件carte-config-8081.xml 8082类似8081
<masters>
<slaveserver>
<name>master</name>
<hostname>hadoop102</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>hadoop103</hostname>
<port>8081</port>
<username>cluster</username>
<password>cluster</password>
<master>N</master>
</slaveserver>
(3)启动相关进程,在hdp-1、hdp-2、hdp-3上执行
[root@hdp-2 data-integration]$./carte.sh hdp-2 8080
[root@hdp-1 data-integration]$./carte.sh hdp-1 8081
[root@hdp-3 data-integration]$./carte.sh hdp-3 8082
访问web页面 http://hdp-2:8080成功就说明启动成功,网页没有实质性作用
若涉及到hive和hbase的读写,需要修改相关配置文件。
修改解压目录下的data-integration\plugins\pentaho-big-data-plugin下的plugin.properties,设置active.hadoop.configuration=hdp26,并将如下配置文件拷贝到data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp26下
还是在Windowst Spoon上操作,创建子服务器,集群模式,最后集群模式运行
六、调优
1、调整JVM大小进行性能优化,修改Kettle根目录下的Spoon脚本。
2、 调整提交(Commit)记录数大小进行优化,Kettle默认Commit数量为:1000,可以根据数据量大小来设置Commitsize:1000~50000
3、尽量使用数据库连接池;
4、尽量使用缓存,缓存尽量大一些(主要是文本文件和数据流);
5、可以使用sql来做的一些操作尽量用sql;Group , merge , stream lookup,split field这些操作都是比较慢的,想办法避免他们.,能用sql就用sql;
6、插入大量数据的时候尽量把索引删掉;
7、尽量避免使用update , delete操作,尤其是update,如果可以把update变成先delete, 后insert;
8、能使用truncate table的时候,就不要使用deleteall row这种类似sql合理的分区,如果删除操作是基于某一个分区的,就不要使用delete row这种方式(不管是deletesql还是delete步骤),直接把分区drop掉,再重新创建;
9、尽量使用数据库原生的方式装载文本文件(Oracle的sqlloader, mysql的bulk loader步骤)。