Kettle 入门
Kettle 入门 - Incanus - OSCHINA - 中文开源技术交流社区
1 概述
1.1 什么是 Kettle?
Kettle 是一款开源的 ETL 工具,纯 Java 编写,可以在 Window、Linux、Unix 上运行,绿色无需安装,数据抽取高效稳定。
1.2 Kettle 工程存储方式
- 以 XML 形式存储
- 以资源库方式存储(数据库资源库和文件资源库)
1.3 Kettle 的两种设计
1.4 Kettle 的组成
1、勺子(Spoon.bat/spoon.sh): 是一个图形化的界面,可以让我们用图形化的方式开发转换和作业,Windows 选择Spoon.bat,Linux 选择 spoon.sh
2、煎锅(Pan.bat/pan.sh): 利用 Pan 可以用命令行的形式调用 Trans
3、厨房(Kitchen.bat/kitchen.sh): 利用 Kitchen 可以使用命令行调用 Job
4、菜单(Carte.bat/ Carte.sh):Carte 是一个轻量级的 Web 容器,用于建立专用、远程的 ETL Server
1.5 Kettle 的特点
2 安装部署
官网地址
https://community.hitachivantara.com/docs/DOC-1009855
下载地址
[https://sourceforge.net/projects/pentaho/files/Data%20Integration/](https://sourceforge.net/projects/pentaho/files/Data Integration/)
2.1 Windows 下安装使用
安装 JDK
下载 Kettle 压缩包,Kettle 是绿色软件,解压缩到任意本地路径即可
双击 Spoon.bat,启动图形化界面工具,就可以直接使用了
2.2 单机
运行数据库资源库中的转换
[djm@hadoop102 data-integration]$./pan.sh -rep=my_repo -user=admin -pass=admin -trans=stu1tostu2 -dir=/
参数说明:
-
rep:资源库名称
-
user:资源库用户名
-
pass:资源库密码
-
trans:要启动的转换名称
-
dir:目录(不要忘了前缀 /)
运行资源库里的作业:
[djm@hadoop102 data-integration]$./kitchen.sh -rep=repo1 -user=admin -pass=admin -job=jobDemo1 -logfile=./logs/log.txt -dir=/
参数说明:
-
rep:资源库名
-
user:资源库用户名
-
pass:资源库密码
-
job:job名
-
dir:job路径
-
logfile:日志目录
2.3 集群安装
准备三台服务器,hadoop102 作为 Kettle 主服务器,服务器端口号为 8080,hadoop103 和 hadoop104 作为两个子服务器,端口号分别为 8081 和 8082
上传解压 kettle 的安装包
进到 /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
<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>
- 修改从配置文件carte-config-8082.xml
<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>slave2</name>
<hostname>hadoop104</hostname>
<port>8082</port>
<username>cluster</username>
<password>cluster</password>
<master>N</master>
</slaveserver>
分发
启动相关进程,在 hadoop102,hadoop103,hadoop104 上执行
[djm@hadoop102 data-integration]$./carte.sh hadoop102 8080
[djm@hadoop103 data-integration]$./carte.sh hadoop103 8081
[djm@hadoop104 data-integration]$./carte.sh hadoop104 8082
3 案例
3.1 案例一:
把 stu1 的数据按 id 同步到 stu2,stu2 有相同 id 则更新数据
1)在 mysql 中创建两张表
mysql> create database kettle;
mysql> use kettle;
mysql> create table stu1(id int,name varchar(20),age int);
mysql> create table stu2(id int,name varchar(20));
2)往两张表中插入数据
mysql> insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18), (1003,'wangwu',23);
mysql> insert into stu2 values(1001,'wukong');
3)在 kettle 中新建转换
4)分别在输入和输出中拉出表输入和插入/更新
5)双击表输入对象,填写相关配置,测试是否成功
6)双击 更新/插入对象,填写相关配置
7)保存转换,启动运行,去 mysql 表查看结果
3.2 案例 二:
使用作业执行上述转换,并且额外在表 stu2 中添加一条数据
1)新建一个作业
2)按图示拉取组件
3)双击 Start 编辑属性
4)双击转换,选择案例 1 保存的文件
5)双击 SQL,编辑 SQL 语句
6)保存执行
3.3 案例 三:
将 Hive 表的数据输出到 hdfs
1)因为涉及到 Hive 和 HBase 的读写,需要修改相关配置文件
2)创建两张表 dept 和 emp
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';
3)导入数据
load data local inpath '/opt/module/datas/dept.txt' into table dept;
load data local inpath '/opt/module/datas/emt.txt' into table emp;
4)按下图建立流程图
5)设置表输入,连接 Hive
6)设置排序记录属性
7)设置连接属性
8)设置字段选择
9)设置文件输出
10)保存并查看 HDFS
3.4 案例 四:
读取 HDFS 文件并将 sal 大于 1000 的数据保存到 HBase 中
1)在 HBase 中创建一张表用于存放数据
[djm@hadoop102 ~]$ /opt/module/hbase-1.3.1/bin/hbase shell
hbase(main):004:0> create 'people','info'
2)按下图建立流程图
3)设置文件输入,连接 HDFS
4)设置过滤记录
5)设置 HBase output
6)保存执行
4 创建资源库
4.1 数据库资源库
数据库资源库是将作业和转换相关的信息存储在数据库中,执行的时候直接去数据库读取信息,很容易跨平台使用
1)点击右上角 connect,选择 Other Resporitory
2)选择 Database Repository
3)填好之后,点击finish,会在指定的库中创建很多表,至此数据库资源库创建完成
-
连接资源库,默认账号密码为 admin
-
将之前做过的转换导入资源库
4.2 文件资源库
将作业和转换相关的信息存储在指定的目录中,其实和XML的方式一样创建方式跟创建数据库资源库步骤类似,只是不需要用户密码就可以访问,跨平台使用比较麻烦
1)点击右上角 connect,选择 Other Resporitory
2)选择 File Repository
3)填写信息
5 优化
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
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 步骤)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2019-06-03 Mosquitto--webServer应用测试结果
2018-06-03 内连接、左外连接、右外连接、交叉连接区别