赞
踩
1 、什么是kettle
Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数
据抽取高效稳定。
2 、Kettle工程存储方式
( 1 )以XML形式存储
( 2 )以资源库方式存储(数据库资源库和文件资源库)
3 、Kettle的两种设计
4 、Kettle的组成
5 、kettle特点
在实际企业开发中,都是在本地环境下进行kettle的job和Transformation开发的,可以在本地运行,也
可以连接远程机器运行
( 2 )安装步骤
1 、安装jdk
2 、下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可
3 、双击Spoon.bat,启动图形化界面工具,就可以直接使用了
把stu1的数据按id同步到stu2,stu2有相同id则更新数据
1 、在mysql中创建testkettle数据库,并创建两张表
在master主机的mysql创建stu1,在node1建立stu2
create database testkettle;
use testkettle;
create table stu1(id int,name varchar(20),age int);
create table stu2(id int,name varchar(20));
2 、往两张表中插入一些数据
-- stu1表内容
insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18),
(1003,'wangwu',23);
-- stu2表内容
insert into stu2 values(1001,'wukong');
3 、把pdi-ce-8.2.0.0-342.zip文件拷贝到win环境中指定文件目录,解压后双击Spoon.bat,启动图形
化界面工具,就可以使用了
在data-integration\lib文件下添加mysql驱动,重新打开软件
新建转换创建一个表输入,添加得到,并双击他,在数据库连接栏目点击 新建 ,填入mysql相关配置,并测试连接
新建stu2表输出,配置mysql连接
现在我们需要把输入stu1的数据同步到stu2输出的数据
运行
执行成功之后,可以在mysql查看,stu2的数据
3 、双击Start编辑Start
5 、在mysql的stu1中插入一条数据,并将stu2中id=1001的name改为wukong
mysql> insert into stu1 values(1004,'stu1',22);
Query OK, 1 row affected (0.01 sec)
mysql> update stu2 set name = 'wukong' where id = 1001;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
7 、加上Dummy,如图所示:
9 、在mysql数据库查看stu2表的数据
mysql> select * from stu2;
+------+----------+
| id | name |
+------+----------+
| 1001 | zhangsan |
| 1002 | lisi |
| 1003 | wangwu |
+------+----------+
3 rows in set (0.00 sec)
1 、因为涉及到hive读写,需要修改相关配置文件(由于hadoop版本为3.1.1所以取hdp30)
修改解压目录下的data-integration\plugins\pentaho-big-data-plugin下的plugin.properties,设
置active.hadoop.configuration=hdp30,并将如下配置文件拷贝到data-
integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp30下
这些文件为之前装的hadoop的配置文件里面找到复制过来
2 、启动hadoop集群、hiveserver2服务
3 、进入hive shell,创建kettle数据库,并创建dept、emp表
create database kettle;
use kettle;
CREATE TABLE dept(
deptno int,
dname string,
loc string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
CREATE TABLE emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm int,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
insert into dept values(10,'accounting','NEW YORK'),(20,'RESEARCH','DALLAS'),
(30,'SALES','CHICAGO'),(40,'OPERATIONS','BOSTON');
insert into emp values(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20),
(7499,'ALLEN','SALESMAN',7698,'1980-12-17',1600,300,30),
(7521,'WARD','SALESMAN',7698,'1980-12-17',1250,500,30),
(7566,'JONES','MANAGER',7839,'1980-12-17',2975,NULL,20);
如果出现outOfMemory错误那么需要点击字段 然后选择最小宽度
6 、保存并运行查看hdfs
运行
1 、在HBase中创建一张people表
hbase(main):004:0> create 'people','info'
设置HBase output
编辑hadoop连接,并配置zookeeper地址
查看hbase people表的数据
scan 'people'
注意:若报错没有权限往hdfs写文件,在Spoon.bat中第 119 行添加参数
"-DHADOOP_USER_NAME=root" "-Dfile.encoding=UTF-8"
mysql> create database kettle;
Query OK, 1 row affected (0.01 sec)
点击右上角connect,选择Other Resporitory
选择Database Repository
填好之后,点击finish,会在指定的库中创建很多表,至此数据库资源库创建完成
默认账号密码为admin
选择从xml文件导入
查看MySQL中kettle库中的R_TRANSFORMATION表,观察转换是否保存
选择connect
点击add后点击Other Repositories
选择File Repository
填写信息
jdk安装
安装包上传到服务器,并解压
注意:
1. 把mysql驱动拷贝到lib目录下
2. 将windows本地用户家目录下的隐藏目录C:\Users\自己用户名\.kettle 目录,
整个上传到linux的用户的家目录下,root用户的家目录为/root/
运行数据库资源库中的转换:
cd /usr/local/soft/data-integration
./pan.sh -rep=my_repo -user=admin -pass=admin -trans=trans1
-rep 资源库名称
-user 资源库用户名
-pass 资源库密码
-trans 要启动的转换名称
-dir 目录(不要忘了前缀 /)(如果是以ktr文件运行时,需要指定ktr文件的路径)
2022 /04/23 16 :00:26 - HIVE中EMP表输入.0 - ERROR (version 8 .2.0.0-342, build
8 .2.0.0-342 from 2018 -11-14 10 .30.55 by buildguy) : An error occurred,
processing will be stopped:
2022 /04/23 16 :00:26 - HIVE中EMP表输入.0 - Error occurred while trying to connect
to the database
2022 /04/23 16 :00:26 - HIVE中EMP表输入.0 -
2022 /04/23 16 :00:26 - HIVE中EMP表输入.0 - Error connecting to database: (using
class org.apache.hive.jdbc.HiveDriver)
2022 /04/23 16 :00:26 - HIVE中EMP表输入.0 - No suitable driver found for
jdbc:hive2://master:10000/kettle
2022 /04/23 16 :00:26 - HIVE中DEPT表输入.0 - ERROR (version 8 .2.0.0-342, build
8 .2.0.0-342 from 2018 -11-14 10 .30.55 by buildguy) : An error occurred,
processing will be stopped:
2022 /04/23 16 :00:26 - HIVE中DEPT表输入.0 - Error occurred while trying to connect
to the database
2022 /04/23 16 :00:26 - HIVE中DEPT表输入.0 -
2022 /04/23 16 :00:26 - HIVE中DEPT表输入.0 - Error connecting to database: (using
class org.apache.hive.jdbc.HiveDriver)
2022 /04/23 16 :00:26 - HIVE中DEPT表输入.0 - No suitable driver found for
jdbc:hive2://master:10000/kettle
2022 /04/23 16 :00:26 - HIVE中DEPT表输入.0 - ERROR (version 8 .2.0.0-342, build
8 .2.0.0-342 from 2018 -11-14 10 .30.55 by buildguy) : 错误初始化步骤[HIVE中DEPT表输入]
2022 /04/23 16 :00:26 - HIVE中EMP表输入.0 - ERROR (version 8 .2.0.0-342, build
8 .2.0.0-342 from 2018 -11-14 10 .30.55 by buildguy) : 错误初始化步骤[HIVE中EMP表输入]
2022 /04/23 16 :00:26 - hive2HDFS - ERROR (version 8 .2.0.0-342, build 8 .2.0.0-342
from 2018 -11-14 10 .30.55 by buildguy) : 步骤 [HIVE中EMP表输入.0] 初始化失败!
2022 /04/23 16 :00:26 - hive2HDFS - ERROR (version 8 .2.0.0-342, build 8 .2.0.0-342
from 2018 -11-14 10 .30.55 by buildguy) : 步骤 [HIVE中DEPT表输入.0] 初始化失败!
2022 /04/23 16 :00:26 - HIVE中EMP表输入.0 - Finished reading query, closing
connection.
2022 /04/23 16 :00:26 - HIVE中DEPT表输入.0 - Finished reading query, closing
connection.
rm -rf ./system/karaf/caches
记得把作业里的转换变成资源库中的资源
记得把作业也变成资源库中的资源
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 – 日志目录
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
注意:因为涉及到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下
直接使用trans1
创建子服务器,填写相关配置,跟集群上的配置相同
创建集群schema,选中上一步的几个服务器
对于要在集群上执行的步骤,右键选择集群,选中上一步创建的集群schema
创建Run Configuration,选择集群模式
直接运行,选择集群模式运行
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 、尽量缩小输入的数据集的大小(增量更新也是为了这个目的);
应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但
是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在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步骤)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。