数据迁移工具kettle安装和优化

0    170    2

Tags:

👉 本文共约6464个字,系统预计阅读时间或需25分钟。

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/

数据迁移工具kettle安装和优化

参考: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中定义的数据库连接参数进行加密。

数据迁移工具kettle安装和优化

基本概念

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,是一个数据流的图形化表示。
img

在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编写,可以跨平台运行,绿色无需安装,数据抽取高效稳定。
img
img

相对于传统的商业软件,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 。

数据迁移工具kettle安装和优化

备注:

kitchen.sh:用来执行job作业
pan.sh:用来执行ktr转换

配置界面语言:

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

或:

数据迁移工具kettle安装和优化

ubuntu 20.04

数据迁移工具kettle安装和优化

仍然会报错:

目录

kettle目录说明
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环境使用的。

数据迁移工具kettle安装和优化

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安装和优化

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 相关参数如下:

数据迁移工具kettle安装和优化

修改完效率不是很高,但是略微能提升一点读写性能。

表输出设置多线程

表输入和表输出都可以设置多线程,但是【表输入】开启多线程会造成数据重复,比如select * from table设置为3,就会迁移3份重复数据,故只设置表输出:

img

数据迁移工具kettle安装和优化

数字8就代表开启了8个输出线程,开启后速度明显提升不少。

img

注意:在表输出使用多线程的时候,不能使用“裁剪表”功能,否则会导致部分数据丢失。

数据迁移工具kettle安装和优化

MySQL修改登陆参数

mysql表输出的时候出现减速的原因可能是因为网络链接的属性设置

在此处添加参数:

[useServerPrepStmts=false]
关闭服务器端编译,sql语句在客户端编译好再发送给服务器端。

[rewriteBatchedStatements=true]
mysql默认关闭了batch处理,通过此参数进行打开,开启批量写功能。这个参数可以重写向数据库提交的SQL语句,将多个相同insert语句合并为一个insert语句。

[useCompression=true]
压缩数据传输,优化客户端和MySQL服务器之间的通信性能。

如图:

img

修改提交记录数量

对于大记录的表,应该增加“提交记录数量”,例如:10000,

image-20220705152340885

Kettle使用【插入/更新】组件非常慢,每秒1条数据

解决:不使用【插入/更新】该组件,直接使用表输出组件。我就是通过该方式解决的。

其它可可能原因:

1、建立相应的关键字索引

2、表与表关联的关键字段数据类型必须一致

日志级别

Kettle的日志级别LogLevel分为以下几个:
Nothing
没有日志 不显示任何输出
Error
错误日志 仅仅显示错误信息
Minimal
最小日志 使用最小的日志
Basic
基本日志 缺省的日志级别
Detailed
详细日志 给出日志输出的细节
Debug
调试日志 调试目的,调试输出
Rowlevel
行级日志 打印出每一行记录的信息
默认为基本日志

命令行运行

生成文件后,可以直接在命令行运行:

ktr文件和界面对应关系

并行的数量,默认为1:

插入数据之前是否执行truncate操作,默认为Y:

提交记录数量,默认100:

参考

系列: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

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部