数据迁移工具kettle安装和优化
kettle简介
Kettle最早是一个开源的ETL工具,全称为KDE Extraction, Transportation, Transformation and Loading Environment。
在2006年,Pentaho公司收购了Kettle项目,原Kettle项目发起人Matt Casters加入了Pentaho团队,成为Pentaho套件数据集成架构师 ;从此,Kettle成为企业级数据集成及商业智能套件Pentaho的主要组成部分,Kettle亦重命名为Pentaho Data Integration ,简称“PDI”。Pentaho公司于2015年被Hitachi Data Systems收购。 自2017年9月20日起,Pentaho已经被合并于日立集团下的新公司: Hitachi Vantara。
Pentaho Data Integration以Java开发,支持跨平台运行,其特性包括:支持100%无编码、拖拽方式开发ETL数据管道;可对接包括传统数据库、文件、大数据平台、接口、流数据等数据源;支持ETL数据管道加入机器学习算法。
Pentaho Data Integration分为商业版与开源版,开源版的截止2021年1月的累计下载量达836万,其中19%来自中国 。在中国,一般人仍习惯把Pentaho Data Integration的开源版称为Kettle。
Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。
kettle 的官网是 https://community.hitachivantara.com/docs/DOC-1009855
https://community.hitachivantara.com/home
github 地址是 https://github.com/pentaho/pentaho-kettle
下载地址:https://sourceforge.net/projects/pentaho/files/Data%20Integration/
参考:https://blog.51cto.com/51power/5216715
KETTLE常用功能
KETTLE常用在处理关系型数据库(RDBMS):mysql、oracle、gbase、国产达梦等各种数据库,也可以处理非关系型数据库:elasticsearch、hdfs等数据存储。主要是对数据进行处理操作,个人常用的功能如下:
(1)全量数据迁移:
就是将某个或多个表或库中的数据进行迁移,可以跨库,也可以同库迁移。速度比较快,性能稳定。
(2)增量数据迁移:
就是对某个表中的数据按照一定的设计思路,根据int的自增主键或datetime的时间戳实现增量数据迁移,并且可以统计增量数据量。速度比较快,性能稳定。
(3)解析xml文件(单个、批量):
可以通过读取本地或远程服务器中的单个、批量xml文件进行解析,高效率的实现xml数据解析入库。
(4)解析JSON数据:
可以零代码通过jsonPath快速完成JSON数据解析,高效率实现JSON解析数据入库。
(5)数据关联比对:
可以将多个数据库根据一定的业务字段进行关联,尤其是针对单表百万、千万级别上的数据比对,普通sql实现困难,可以通过KETTLE方便高效的完成数据关联比对功能。
(6)数据清洗转换:
可以通过KETTLE中设计一定的判断流程,在数据流中逐条对数据进行业务判断和过滤,实现数据清洗转换的功能。
架构
Kettle是一个组件化的集成系统,包括如下几个主要部分:
1.Spoon:图形化界面工具(GUI方式),Spoon允许你通过图形界面来设计Job和Transformation,可以保存为文件或者保存在数据库中。
也可以直接在Spoon图形化界面中运行Job和Transformation,
2.Pan:Transformation执行器(命令行方式),Pan用于在终端执行Transformation,没有图形界面。
3.Kitchen:Job执行器(命令行方式),Kitchen用于在终端执行Job,没有图形界面。
4.Carte:嵌入式Web服务,用于远程执行Job或Transformation,Kettle通过Carte建立集群。
5.Encr:Kettle用于字符串加密的命令行工具,如:对在Job或Transformation中定义的数据库连接参数进行加密。
基本概念
1.Transformation:定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比Job粒度更小一级的容器,我们将任务分解成Job,然后需要将Job分解成一个或多个Transformation,每个Transformation只完成一部分工作。
2.Step:是Transformation内部的最小单元,每一个Step完成一个特定的功能。
3.Job:负责将Transformation组织在一起进而完成某一工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的Job,当这几个Job都完成了,也就说明这项任务完成了。
4.Job Entry:Job Entry是Job内部的执行单元,每一个Job Entry用于实现特定的功能,如:验证表是否存在,发送邮件等。可以通过Job来执行另一个Job或者Transformation,也就是说Transformation和Job都可以作为Job Entry。
5.Hop:用于在Transformation中连接Step,或者在Job中连接Job Entry,是一个数据流的图形化表示。
在Kettle中Job中的JobEntry是串行执行的,故Job中必须有一个Start的JobEntry;Transformation中的Step是并行执行的。
1、repository资源库
用来保存转换任务的,用户通过图形界面创建的的转换任务可以保存在资源库中。资源库可以使多用户共享转换任务,转换任务在资源库中是以文件夹形式分组管理的,用户可以自定义文件夹名称。
2、ktr转换
将一个或多个数据源组装成一条数据流水线,根据业务要求,利用Kettle内部的组件,进行数据处理,最后输出到某一个地方(文件或数据库)。
3、kjb作业
可以调度设计好的一个或多个转换,也可以执行一些文件处理(比较\删除等),还可以往ftp上传和下载文件,发送邮箱,执行shell命令等等。
4、连接线
连接转换步骤或者连接Job(实际上就是执行顺序)的连线。
5、转换连接
表示数据的流向。从输入开始,中间包括了:过滤等转换操作,最后到输出。
6、作业连接
表示作业的执行流程。作业连接时,可设置执行条件有3种:
a、无条件执行
b、当上一个Job执行结果为true时执行
c、当上一个Job执行结果为false时执行
组件对比
目前,ETL工具的典型代表有:
- 商业软件:Informatica PowerCenter,IBM InfoSphere DataStage,Oracle Data Integrator,Microsoft SQL Server Integration Services等
- 开源软件:Kettle,Talend,Apatar,Scriptella等
纯java编写,可以跨平台运行,绿色无需安装,数据抽取高效稳定。
相对于传统的商业软件,Kettle是一个易于使用的,低成本的解决方案。
Spoon是基于SWT(SWT使用了本地操作系统的组件库,性能更好,界面更符合本地操作系统的风格)开发的,支持多平台:
- Microsoft Windows: all platforms since Windows 95, including Vista
- Linux GTK: on i386 and x86_64 processors, works best on Gnome
- Apple's OSX: works both on PowerPC and Intel machines
- Solaris: using a Motif interface (GTK optional)
- AIX: using a Motif interface
- HP-UX: using a Motif interface (GTK optional)
- FreeBSD: preliminary support on i386, not yet on x86_64
Kettle使用场景
- Migrating data between applications or databases 在应用程序或数据库之间进行数据迁移
- Exporting data from databases to flat files 从数据库导出数据到文件
- Loading data massively into databases 导入大规模数据到数据库
- Data cleansing 数据清洗
- Integrating applications 集成应用程序
kettle安装
下载:https://sourceforge.net/projects/pentaho/files/Data%20Integration/
https://sourceforge.net/projects/pentaho/files/
Kettle免安装,在windows或linux环境下,直接解压到指定目录即可。
需要有java环境和下载相应的数据库驱动。由于 kettle 需要连接数据库,因此需要下载对应的数据库驱动。例如 MySQL 数据库需要下载 mysql-connector-java.jar,oracle 数据库需要下载 ojdbc.jar。下载完成后,将 jar 放入 kettle 解压后路径的 lib 文件夹中即可。
双击 Spoon.bat 就能启动 kettle 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | wget https://udomain.dl.sourceforge.net/project/pentaho/Pentaho-9.3/client-tools/pdi-ce-9.3.0.0-428.zip docker rm -f lhrkettle docker run -itd --name lhrkettle -h lhrkettle \ -p 9390:3389 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:9.0 \ /usr/sbin/init docker cp pdi-ce-9.3.0.0-428.zip lhrkettle:/soft/ yum install -y webkitgtk* wget http://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/EPEL:/el7/RHEL_7/x86_64/webkitgtk-2.4.9-1.el7.x86_64.rpm yum install -y webkitgtk-2.4.9-1.el7.x86_64.rpm unzip pdi-ce-9.3.0.0-428.zip -d /usr/local/ cd /usr/local/data-integration/lib 上传jar包: -- 修改如下参数,否则界面不能点击,会卡住,点不动 vi /usr/local/data-integration/spoon.sh export LANG=zh_CN.UTF-8 #export GDK_NATIVE_WINDOWS=0 export SWT_GTK3=1 cd /usr/local/data-integration [root@lhrkettle data-integration]# ./kitchen.sh Options: -rep = Repository name -user = Repository username -trustuser = !Kitchen.ComdLine.RepUsername! -pass = Repository password -job = The name of the job to launch -dir = The directory (dont forget the leading /) -file = The filename (Job XML) to launch -level = The logging level (Basic, Detailed, Debug, Rowlevel, Error, Minimal, Nothing) -logfile = The logging file to write to -listdir = List the directories in the repository -listjobs = List the jobs in the specified directory -listrep = List the available repositories -norep = Do not log into the repository -version = show the version, revision and build date -param = Set a named parameter <NAME>=<VALUE>. For example -param:FILE=customers.csv -listparam = List information concerning the defined parameters in the specified job. -export = Exports all linked resources of the specified job. The argument is the name of a ZIP file. -custom = Set a custom plugin specific option as a String value in the job using <NAME>=<Value>, for example: -custom:COLOR=Red -maxloglines = The maximum number of log lines that are kept internally by Kettle. Set to 0 to keep all rows (default) -maxlogtimeout = The maximum age (in minutes) of a log line while being kept internally by Kettle. Set to 0 to keep all rows indefinitely (default) [root@lhrkettle data-integration]# -- 启动图形界面 sh /usr/local/data-integration/spoon.sh & |
备注:
kitchen.sh:用来执行job作业
pan.sh:用来执行ktr转换
配置界面语言:
1 2 | vi /usr/local/data-integration/spoon.sh export LANG=zh_CN.UTF-8 |
或:
ubuntu 20.04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | wget http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm -- 将rpm转换位deb,完成后会生成一个同名的xxxx.deb sudo alien nux-dextop-release-0-5.el7.nux.noarch.rpm -- 安装 sudo dpkg -i nux-dextop-release_0-6_all.deb vi /etc/apt/sources.list deb http://cz.archive.ubuntu.com/ubuntu bionic main universe sudo apt-get update sudo apt-get install libwebkitgtk-1.0-0 sudo apt-get install libcanberra-gtk-module apt-get install gtk2-engines-pixbuf -- In Debian, the new needed libraries are: sudo apt-get install libwebkit2gtk-4.0-37 sudo apt-get install libwebkit2gtk-4.0-37-gtk2 |
仍然会报错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | root@lhrubuntu2004:/etc/apt# sudo apt-get update Hit:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease Hit:2 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates InRelease Hit:3 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports InRelease Hit:4 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security InRelease Hit:5 https://dl.google.com/linux/chrome/deb stable InRelease Hit:6 https://linux.teamviewer.com/deb stable InRelease Ign:7 http://cz.archive.ubuntu.com/ubuntu bionic InRelease Err:8 http://cz.archive.ubuntu.com/ubuntu bionic Release SECURITY: URL redirect target contains control characters, rejecting. [IP: 217.31.202.63 80] Reading package lists... Done E: The repository 'http://cz.archive.ubuntu.com/ubuntu bionic Release' does not have a Release file. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. root@lhrubuntu2004:/etc/apt# apt-get install libwebkitgtk-1.0-0 Reading package lists... Done Building dependency tree Reading state information... Done Package libwebkitgtk-1.0-0 is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package 'libwebkitgtk-1.0-0' has no installation candidate root@lhrubuntu2004:/etc/apt# |
目录
kettle目录说明
kettle软件包解压后,会产生很多目录
classes:生命周期监听、注册表扩展、日志的配置文件
Data Integration.app:数据集成应用
Data Service JDBC Driver:JDBC驱动程序的数据服务
docs:文档
launcher:Kettle的启动配置
lib:支持库的jar包
libswt:Kettle图形库jar
plugins:插件
pwd:Kettle集群配置文件
samples:自带例子
simple-jndi:jndi连接配置
system:系统目录
ui:软件界面
Kettle常用工具说明
下图中使用红色方框标识的,就是kettle常用的工具。大家可以看到,每类工具它都有2种扩展名:
(1) .bat后缀的工具,它是windows环境使用的
(2) .sh后缀的工具,它是linux环境使用的。
Spoon:是一个图形用户界面,允许你通过图形界面来设计ETL转换过程(Transformation)和任务。
Pan:转换(trasform)执行器;允许你批量运行由Spoon设计的ETL转换(如使用一个时间调度器)。Pan是一个后台执行的程序,没有图形界面。
Kitchen:作业(job)执行器;允许你批量使用由Chef设计的任务(如使用一个时间调度器)。KITCHEN也是一个后台运行的程序。
Encr: 用来加密连接数据库密码与集群时使用的密码
Carte:kettle支持Carte服务级部署模式,即服务器后台会跑一个常驻Carte程序,job/trans都运行在这个服务里。Carte是一个轻量级的web服务,允许远程请求HTTP进行监控、启动、停止在Carte服务上运行的job和trans
set-pentaho-env:设置环境变量脚本
SpoonDebug:以Debug的方式运行kettle
kettle优化
修改JVM内存大小
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行堆内存设置,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值,建议堆的最大值设置为可用内存的最大值的80%。
本机内存8G,修改spoon.bat 相关参数如下:
修改完效率不是很高,但是略微能提升一点读写性能。
表输出设置多线程
表输入和表输出都可以设置多线程,但是【表输入】开启多线程会造成数据重复,比如select * from table设置为3,就会迁移3份重复数据,故只设置表输出:
数字8就代表开启了8个输出线程,开启后速度明显提升不少。
注意:在表输出使用多线程的时候,不能使用“裁剪表”功能,否则会导致部分数据丢失。
MySQL修改登陆参数
mysql表输出的时候出现减速的原因可能是因为网络链接的属性设置
在此处添加参数:
1 2 3 | useServerPrepStmts=false rewriteBatchedStatements=true useCompression=true |
[useServerPrepStmts=false]
关闭服务器端编译,sql语句在客户端编译好再发送给服务器端。[rewriteBatchedStatements=true]
mysql默认关闭了batch处理,通过此参数进行打开,开启批量写功能。这个参数可以重写向数据库提交的SQL语句,将多个相同insert语句合并为一个insert语句。[useCompression=true]
压缩数据传输,优化客户端和MySQL服务器之间的通信性能。
如图:
修改提交记录数量
对于大记录的表,应该增加“提交记录数量”,例如:10000,
Kettle使用【插入/更新】组件非常慢,每秒1条数据
解决:不使用【插入/更新】该组件,直接使用表输出组件。我就是通过该方式解决的。
其它可可能原因:
1、建立相应的关键字索引
2、表与表关联的关键字段数据类型必须一致
日志级别
Kettle的日志级别LogLevel分为以下几个:
Nothing
没有日志 不显示任何输出
Error
错误日志 仅仅显示错误信息
Minimal
最小日志 使用最小的日志
Basic
基本日志 缺省的日志级别
Detailed
详细日志 给出日志输出的细节
Debug
调试日志 调试目的,调试输出
Rowlevel
行级日志 打印出每一行记录的信息
默认为基本日志
命令行运行
生成文件后,可以直接在命令行运行:
1 2 | /usr/local/data-integration/kitchen.sh -file=job_o2m.kjb /usr/local/data-integration/pan.sh -file=inventories.ktr -level=Minimal |
ktr文件和界面对应关系
并行的数量,默认为1:
1 | <copies>10</copies> |
插入数据之前是否执行truncate操作,默认为Y:
1 | <truncate>Y</truncate> |
提交记录数量,默认100:
1 | <commit>10000</commit> |
参考
系列:https://blog.51cto.com/51power/5268480
https://blog.csdn.net/qq_42651904/article/details/101027425
https://cloud.tencent.com/developer/article/1452447
https://blog.csdn.net/qq642999119/article/details/50600178
https://blog.csdn.net/weixin_42123737/article/details/91387337?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-91387337-blog-50600178.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-91387337-blog-50600178.pc_relevant_aa&utm_relevant_index=1
https://www.cnblogs.com/zwz123/p/15407854.html