ETL工具Kettle

朴灿烈づ我的快乐病毒、 2023-03-02 07:39 110阅读 0赞

文章目录

  • 一、Kettle概述
    • 1.1 什么是kettle
    • 1.2 Kettle核心知识点
    • 1.3 Kettle特点
  • 二、Kettle的使用
    • 2.1 数据库表之间的同步
    • 2.2 数据库表之间的同步【高级】
    • 2.3 Hive输出到HDFS
    • 2.4 HDFS数据输出到HBase
  • 三、Kettle资源库
    • 3.1 数据库资源库
    • 3.2 文件资源库
  • 四、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并添加数据

  1. mysql> create database kettle;
  2. mysql> use kettle;
  3. mysql> create table stu1(id int,name varchar(20),age int);
  4. mysql> create table stu2(id int,name varchar(20));
  5. mysql> insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18), (1003,'wangwu',23);
  6. 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

  1. 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步骤)。

发表评论

表情:
评论列表 (有 0 条评论,110人围观)

还没有评论,来说两句吧...

相关阅读