程序员的资源宝库

网站首页 > gitee 正文

Kettle 入门 kettle中文版教程

sanyeah 2024-03-29 17:14:24 gitee 10 ℃ 0 评论

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,会在指定的库中创建很多表,至此数据库资源库创建完成

  1. 连接资源库,默认账号密码为 admin

  2. 将之前做过的转换导入资源库

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 步骤)

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表