【Kettle】 Kettle入门解析(五)

一、资源库

【1】数据库资源库

1、概述

数据库资源库是将作业和转换相关的信息存储在数据库中,执行的时候直接去数据库读取信息,很容易跨平台使用

2、使用

准备操作:在MySQL中创建数据库kettle

1)点击右上角connect,选择Other Resporitory
在这里插入图片描述
2) 选择Database Repository
在这里插入图片描述
3) 建立新连接,选择我们之前创建的数据库 kettle
在这里插入图片描述
4) 填好之后,点击finish,会在指定的库中创建很多表,至此数据库资源库创建完成
在这里插入图片描述
5) 连接资源库,默认账号密码为admin
在这里插入图片描述
6) 将之前做过的转换导入资源库
(1)选择从xml文件导入
在这里插入图片描述
(2)随便选择一个导入即可
在这里插入图片描述
在这里插入图片描述
7) 此时在C:\Users\你的windows用户名的目录下生成了一个.kettle文件夹,里面包含了一些Kettle资源库的配置信息

【2】文件资源库

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

1)选择connect
在这里插入图片描述
2)点击add后点击Other Repositories
在这里插入图片描述
3)选择File Repository
在这里插入图片描述
4)填写信息
在这里插入图片描述

二、Kettle在Linux下的使用

前提:因为Kettle是纯Java编写,所以依赖JDK环境,使用前必须安装JDK

1)安装包上传到服务器,解压

注意:

  • 1.把mysql驱动拷贝到lib目录下
  • 2.将Windows本地用户家目录下的隐藏目录C:\Users\你的windows用户名\.kettle文件夹上传到linux的用户家目录下,我的是/home/zsy/
    在这里插入图片描述
2)运行数据库资源库中的转换:
./pan.sh -rep=resources -user=admin -pass=admin -trans=mysql2file -dir=/

参数说明:
-rep 资源库名称
-user 资源库用户名
-pass 资源库密码
-trans 要启动的转换名称
-dir 目录(不要忘了前缀 /)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
4)运行资源库里的作业:

记得把作业里的转换变成资源库中的资源
./kitchen.sh -rep=resources -user=admin -pass=admin -job=jobDemo1 -logfile=./logs/log.txt -dir=/
参数说明:
-rep - 资源库名
-user - 资源库用户名
-pass – 资源库密码
-job – job名
-dir – job路径
-logfile – 日志目录

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、调优

1、调整JVM大小进行性能优化,修改Kettle根目录下的Spoon脚本
参数参考:

  • -Xmx1024m:设置JVM最大可用内存为1024M
  • -Xms512m:设置JVM促使内存为512m。此值可以设置与-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、尽量缩小输入的数据集的大小(增量更新也是为了这个目的)

12、尽量使用数据库原生的方式装载文本文件(Oracle的sqlloader, mysql的bulk loader步骤)

13、尽量不要用kettle的calculate计算步骤,能用数据库本身的sql就用sql ,不能用sql就尽量想办法用procedure,实在不行才是calculate步骤

14、要知道你的性能瓶颈在哪,可能有时候你使用了不恰当的方式,导致整个操作都变慢,观察kettle log生成的方式来了解你的ETL操作最慢的地方

15、远程数据库用文件+FTP的方式来传数据,文件要压缩。(只要不是局域网都可以认为是远程连接)

发布了218 篇原创文章 · 获赞 330 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/weixin_43563705/article/details/105723156