ETL工具Kettle

一、Kettle概述

1.1 什么是kettle

Kettle是一款开源的ETL工具,纯java编写,可以在WindowLinuxUnix上运行,绿色无需安装,数据抽取高效稳定。

1.2 Kettle核心知识点

Kettle工程存储方式

  • XML形式存储
  • 以资源库方式存储(数据库资源库和文件资源库)

Kettle的两种设计

Transformation(转换):完成针对数据的基础转换。
Job(作业):完成整个工作流的控制

  • 作业是步骤流,转换是数据流。这是作业和转换最大的区别
  • 作业的每一个步骤,必须等到前面的步骤都跑完了,后面的步骤才会执行;而转换会一次性把所有控件全部先启动(一个控件对应启动一个线程),然后数据流会从第一个控件开始,一条记录、一条记录地流向最后的控件

在这里插入图片描述
Kettle文件的组成

  • 勺子(Spoon.bat/spoon.sh) : 是一个图形化的界面,可以让我们用图形化的方式开发转换和作业。windows选择Spoon.batLinux选择Spoon.sh
  • 煎锅(Pan.bat/pan.sh): 利用Pan可以用命令行的形式调用Trans
  • 厨房(Kitchen.bat/kitchen.sh): 利用Kitchen可以使用命令行调用Job
  • 菜单(Carte.bat/ Carte.sh)Carte是一个轻量级的Web容器,用于建立专用、远程的ETL Server

1.3 Kettle特点

在这里插入图片描述

二、Kettle的使用

2.1 数据库表之间的同步

案例:把stu1的数据按id同步到stu2stu2有相同id则更新数据。

MySQL中创建stu1stu2并添加数据

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));
mysql> insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18), (1003,'wangwu',23);
mysql> insert into stu2 values(1001,'wukong');

②新建一个转换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
③ )保存转换,启动运行,去mysql表查看结果

注意:如果需要连接mysql数据库,需要要先将mysql的连接驱动包复制到kettle的根目录下的lib目录中,否则会报错找不到驱动。
在这里插入图片描述

2.2 数据库表之间的同步【高级】

案例:使用作业执行上述转换,并且额外在表stu2中添加一条数据

① 新建一个作业
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
② 保存执行

2.3 Hive输出到HDFS

案例:将Hive表的数据输出到HDFS

①因为涉及到HiveHBase的读写,需要修改相关配置文件

修改plugins\pentaho-big-data-plugin下的plugin.properties,设置active.hadoop.configuration=hdp26,并将如下HadoopHiveHBase配置文件拷贝到plugins\pentaho-big-data-plugin\hadoop-configurations\hdp26下。
在这里插入图片描述
② 前提:启动Hadoop集群

③ 使用之前Hive表中已经创建好的deptemp
在这里插入图片描述
④ 新建转换
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
⑤ 执行转换后,从HDFS中下载文件
在这里插入图片描述

2.4 HDFS数据输出到HBase

案例4:读取HDFS文件并将sal大于1000的数据保存到GBase

① 新建HBase

hbase(main):001:0> create 'people','info'

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
③ 保存执行

注意:若报错没有权限往HDFS写文件,在Spoon.bat中第119行添加参数-DHADOOP_USER_NAME=WINDOW -Dfile.encoding=UTF-8或参考https://blog.csdn.net/qq_39717125/article/details/100067828

三、Kettle资源库

资源库是Kettle文件的另一种存储方式

3.1 数据库资源库

① 点击右上角connect,选择Other Resporitory
在这里插入图片描述
② 选择Database Repository
在这里插入图片描述
③ 建立新连接
在这里插入图片描述
在这里插入图片描述
④填好之后,点击finish,会在指定的库中创建很多表,至此数据库资源库创建完成
在这里插入图片描述
⑤ 连接资源库,默认账号密码为admin
在这里插入图片描述
⑥ 将之前做过的转换导入资源库
在这里插入图片描述

3.2 文件资源库

将作业和转换相关的信息存储在指定的目录中,其实和XML的方式一样创建方式跟创建数据库资源库步骤类似,只是不需要用户密码就可以访问,跨平台使用比较麻烦。

四、Kettle优化

  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. KettleJava做的,尽量用大一点的内存参数启动Kettle

  7. 可以使用sql来做的一些操作尽量用sqlGroupmergestream lookupsplit field这些操作都是比较慢的,想办法避免他们,能用sql就用sql

  8. 插入大量数据的时候尽量把索引删掉;

  9. 尽量避免使用updatedelete操作,尤其是update,如果可以把update变成先delete,后insert

  10. 能使用truncate table的时候,就不要使用deleteall row这种类似sql合理的分区,如果删除操作是基于某一个分区的,就不要使用delete row这种方式(不管是deletesql还是delete步骤),直接把分区drop掉,再重新创建;

  11. 尽量缩小输入的数据集的大小(增量更新也是为了这个目的);

  12. 尽量使用数据库原生的方式装载文本文件(Oraclesqlloadermysqlbulk loader步骤)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HuCheng1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值