Kettle入门及性能优化FAQ

一、安装java

配置Java环境mysql

Java环境配置问题sql

java_home:D:\Program Files\Java\jdk1.7.0_25(安装jdk路径)shell

classpath:.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar数据库

path:在path路径中添加%java_home%\bin;%java_home%\jre\bin;windows

kettle_home:D:\Program Files\data-integration(安装kettle路径)性能优化

----------------------------------------------------------------------------------------------------------------------------服务器

rac环境下网络

方式一app

1、不须要填写主机名

2、数据库名写以下链接字符串:

 (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = xx.xxxx.edu.cn)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = xxxdb)))

三、端口号写:-1

方式二

对于10g以上版本数据库在录入数据库名称时加/区分服务名和实例名。斜杠加服务名如/oadb则识别为链接到服务名,冒号或者不加符合加实例名如:dci&&dci则识别为实例名

二、启动

资源库模式默认用户名密码都是admin/admin

三、字符集问题

一、解决字符集问题

只能在表输出加哦

二、mac

数据库链接在选项中添加characterEncoding=utf-8,资源库链接时也必需要加上这个,不然在Mac下中文会乱码

四、闪退问题

一、检查jdk是否安装完成,这里jdk必须为1.8及以上(在屡次实践中发现,jdk9和jdk10使用起来并不稳定,这里咱们强烈推荐使用jdk1.8,不然在后期使用过程当中会出现很是多莫名奇妙的错误);

--------------------- --------------------- --------------------- --------------------- --------------------- ---------------------

查看jdk版本方法:win+R----->cmd----->java -version

------------------------------------- --------------------- --------------------- --------------------- --------------------- -----

查看安装的路径java -verbose 

查看最后一行 

二、修改一下spoon.bat文件

 if "%PENTAHO_DI_JAVA_OPTIONS%"=="" setPENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m""-XX:MaxPermSize=256m"

 改成

 if "%PENTAHO_DI_JAVA_OPTIONS%"=="" setPENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx512m""-XX:MaxPermSize=256m"

------------------------------------------ --------------------- --------------------- --------------------- ---------------------  

五、性能优化

一、SPOON 启动时候内存较小,在spoon.bat这个启动文件中,配置的有JVM的内存XMX,("%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="- Xms8192m" "-Xmx8192m" "-XX:MaxPermSize=4096m"),默认这个是256M,512M  256M, 其中Xms是指JVM初始分配的堆栈的内存,Xmx是指JVM分配的堆栈的内存 (JAVA代码能涉及到的存储数据变量的内存)最大是多少,因此XMS必需要<= XMX,XX:MaxPermSize,是指JVM给本身分配的非堆栈内存(供虚拟机程序本身开销)个人因 为是在服务器上跑,所以改为了8192M\8192M\4096M,这个改不能是无限的加大,须要考虑总的内存大小,通常来讲网上参考是最大堆栈内存不超过总内存的3/8有的也说是 一半,总之得有个度。

二、mysql表输出的时候出现减速的缘由多是由于网络连接的属性设置

在此处添加参数:

 

useServerPrepStmts=false  

rewriteBatchedStatements=true  

useCompression=true 

三、插入流程中数据COMMIT过程太频繁,数据插入的COMMIT太频繁也是很影响效率的,30W的数据提交300次和提交30次速度显然是不同的,只要你的设置的内存能暂时容得下插入的数据,COMMIT能够尽可能设高一点(kettle有限制不能超过50000)

四、针对kettle执行过程出现Couldn't get row from result set  Io异常:Socket read timed out

缘由:出现这个问题缘由多是MySQL数据库设置的wait_timeout太短(缺省为8小时),因为MySQL服务在长时间不链接以后断开了,断开以后的首次请求会抛出这个异常

解决办法:

以root用户登陆MySQL,首先查看wait_timeout:

>show global variables like'wait_timeout';

根据实际状况,设置wait_timeout比以前的时间长一点

>set global wait_timeout=864000;

五、若是是经过Linux或者windows命令行下执行脚本的话,

Error in step, asking everyone to stopbecause of:Error looking up row in database

The last packet successfully received fromthe server was 59,903,094 milliseconds ago.The last packet sent successfully to the server was 59,903,094 milliseconds ago. is longerthan the server configured value of 'wait_timeout'. You should consider either expiring and/or testingconnection validity before use in your application,increasing the server configured valuesfor client timeouts, or using the Connector/J connection property'autoReconnect=true' to avoid this problem.

org.pentaho.di.trans.steps.insertupdate.InsertUpdate.processRow(InsertUpdate.java:307)

org.pentaho.di.trans.step.RunThread.run(RunThread.java:40)

java.lang.Thread.run(Thread.java:745)

缘由:出现这个问题缘由和上面的缘由是同样的:MySQL数据库设置的wait_timeout太短

六、Kettle增量同步数据的五种方式

增量抽取经常使用的捕获变化数据的方法

 1:触发器(又称快照式)---会下降源数据库的性能,因此通常不会采起

 介绍:在抽取的表上创建须要的触发器,通常要创建插入,修改,删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时表,抽取线程

 从临时表中抽取数据,临时表中抽取过的数据被标记或是删除。

 ----------------------------------------------------------------------------------------------------------------------------

 增量抽取时的触发器创建,针对三种触发器,如何写入临时表,如何从临时表中抽取,如何标记或者删除临时表数据。

 ----------------------------------------------------------------------------------------------------------------------------

  优势:数据抽取的性能高,ETL加载规则简单,速度快,不须要修改业务系统表结构,能够实现数据的递增长载。

  缺点:要求业务系统创建触发器,对业务系统有必定的影响,容易对源数据库构成威胁。(会下降数据库的性能,因此通常不采用)

 2:时间戳方式(比较经常使用)

 介绍:它是一种基于快照比较的变化数据捕获方式,在源表上增长一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值。当进行数据抽取时,经过比较上次

 抽取时间与时间戳字段的值来决定抽取那些数据。有的数据库的时间戳支持自动更新,即表的其余字段的数据发生变化时,自动更新时间戳字段。有的数据库不支持时间戳的自动

 更新,这就要求业务系统在更新业务数据时,手工更新时间戳字段。

 ---------------------------------------------------------------------------------------------------------------------------

 经过什么方式来更新时间戳,如何比较抽取时间与源表时间戳字段,如何决定抽取那些数据,如何实现抽取。

 ---------------------------------------------------------------------------------------------------------------------------

 优势:同触发器方式同样,时间戳方式的性能也比较好,ETL系统设计清晰,源数据抽取相对清楚简单,能够实现数据的递增长载。

 缺点:时间戳维护须要由业务系统完成,对业务系统有很大的倾入性(加入额外的时间戳字段),特别是对不支持时间戳的自动更新的数据库,还要求业务系统进行额外的更新时间戳

 操做;另外,没法捕获对时间戳之前数据的delete和update操做,在数据准确上受到必定的限制。

 3:全表删除插入方式

 介绍:每次ETL操做均删除目标表数据,由ETL全新加载数据。

 优势:ETL加载规则简单,速度快。

 缺点:对于维表加外键不合适,当业务系统产生删除数据时,综合系统将不会记录到所删除的历史数据,不能够实现数据的递增长载;同时对于目标表所创建的关联关系,须要从新

 进行加载。

 4:全表比对方式---性能较差

 介绍:全表比对的方式是ETL工具事先为要抽取的表创建一个结构相似的临时表,该临时表记录源表主键以及根据全部字段的数据计算出来,每次进行数据抽取时,对源表和临时表

 进行比对,若有不一样,进行update操做,若目标表没有该主键值,表示该记录尚未,则进行insert操做。

 优势:对已有系统的表结构不产生影响,不须要修改业务操做程序,全部抽取工做由ETL完成,管理维护统一,能够实现数据的递增长载,没有风险。

 缺点:ETL比较复杂,设计比较复杂,速度较慢,与触发器和时间戳的主动通知的方式不一样,全表比对方式是被动的进行全表数据比较,性能较差,当表中没有主键或为一列且含有

 重复记录时,全表对比方式的准确性较差。

 5:日志表方式---较为麻烦

 介绍:在业务系统中添加系统日志表,当业务数据发生变化时,更新维护日志表内容,看成ETL加载时,经过读日志表数据决定加载那些数据及如何加载。

 优势:不须要修改业务系统表结构,源数据抽取清楚,速度较快,能够实现数据的递增长载。

 缺点:日志表维护须要由业务系统来完成,须要对业务系统业务操做程序作修改,记录日志信息,日志表维护较为麻烦,对原有系统有较大影响,工做量大,改动较大,有必定的风险 。

七、Windos环境下利用windos服务作定时任务

一、资源库为数据库

建立启动文件,用于被windows任务计划程序调用

  新建文本文件,重命名为 "每日9点执行.bat",文件右键编辑,以文本文件方式打开,而后复制下面内容进去,保存。

1 D:

2 cd D:\pdi-ce-6.0.0.0-353\data-integration

3 kitchen.bat -rep:XXX -dir:/ -job:"XXX" -user:XXX -pass:XXX -level:Basic -log:D:\kettlebat\log\每日9点执行%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt

 注:第一行D:到第三行的kitchen.bat为打开Kettle的Kitchen.bat,该文件通常在Kettle的根目录,请根据实际保存路径修改。

-rep:后的XXX修改成资源库名称,-job:后的XXX修改成要执行的做业名称,-user:和-pass:后的XXX为资源库的账号密码,

-level为日志级别,共有Basic, Detailed, Debug, Rowlevel, Error, Nothing六种级别,此处使用Basic,其它级别自行测试,

-log后为日志保存路径,路径中的%date和%time是在建立日志的时候给日志名添加上时间。

例:

二、资源库为文件夹

 

例:

c:

cd C:\kettle\pdi-ce-8.2.0.0-342\data-integration      

pan.bat /rep local /trans test1 -level=basic>C:\kettle\test1.LOG

三、后台运行

头部加上:

@echo off

if "%1" == "h" goto begin

mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)

(window.close)&&exit

:begin

::

下一步打开计算机管理:作windos触发器

compmgmt.msc,回车肯定,自行搜索教程,很easy.

 FAQ:

一、不刷资源库,须要更新升级IE11(https://support.microsoft.com/zh-cn/help/2847882/prerequisite-updates-for-internet-explorer-11调试环境)

二、flagfield标志字段:设置标志字段的名称,标志字段用于保存比较的结果,比较结果有下列几种。

  1. “identical” – 旧数据和新数据同样

  2. “changed” – 数据发生了变化;

  3. “new” – 新数据中有而旧数据中没有的记录

  4. “deleted” –旧数据中有而新数据中没有的记录

三、全文比对同步

特此备注下:合并记录以前先进行排序

  1. 旧数据和新数据须要事先按照关键字段排序。 

  2. 旧数据和新数据要有相同的字段名称。 

四、驱动问题

  1. 解决for input string"4294967295"错误

 

最后的解决方案是把其余驱动删掉,只留下ojdbc14,把ojdbc4放在lib/swt下

 2. 没法链接mysql数据库

 

经测试,kettle8.2可兼容使用的mysql最新驱动为mysql-connector-java-5.1.46-bin.jar

请务必注意驱动版本号,不然仍是会报找不到驱动的错误。

相关文章
相关标签/搜索