Kettle入门及性能优化FAQ
1、安装
配置Java环境
Java环境配置问题
java_home:D:\Program Files\Java\jdk1.7.0_25(安装jdk路径)
classpath:.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar
path:在path路径中添加%java_home%\bin;%java_home%\jre\bin;
kettle_home:D:\Program Files\data-integration(安装kettle路径)
----------------------------------------------------------------------------------------------------------------------------
rac环境下
方式一
1、不需要填写主机名
2、数据库名写如下连接字符串:
(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = xx.xxxx.edu.cn)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = xxxdb)))
3、端口号写:-1
方式二
对于10g以上版本数据库在录入数据库名称时加/区分服务名和实例名。斜杠加服务名如/oadb则识别为连接到服务名,冒号或者不加符合加实例名如:dci&&dci则识别为实例名
2、启动
资源库模式默认用户名密码都是admin/admin
3、字符集问题
1、解决字符集问题
只能在表输出加哦
2、mac
数据库连接在选项中添加characterEncoding=utf-8,资源库连接时也必须要加上这个,否则在Mac下中文会乱码
4、闪退问题
1、检查jdk是否安装完成,这里jdk必须为1.8及以上(在多次实践中发现,jdk9和jdk10使用起来并不稳定,这里我们强烈推荐使用jdk1.8,否则在后期使用过程中会出现非常多莫名奇妙的错误);
--------------------- --------------------- --------------------- --------------------- --------------------- ---------------------
查看jdk版本方法:win+R----->cmd----->java -version
------------------------------------- --------------------- --------------------- --------------------- --------------------- -----
查看安装的路径java -verbose
查看最后一行
2、修改一下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"
------------------------------------------ --------------------- --------------------- --------------------- ---------------------
5、性能优化
1、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有的也说是 一半,总之得有个度。
2、mysql表输出的时候出现减速的原因可能是因为网络链接的属性设置
在此处添加参数:
useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true
3、插入流程中数据COMMIT过程太频繁,数据插入的COMMIT太频繁也是很影响效率的,30W的数据提交300次和提交30次速度显然是不一样的,只要你的设置的内存能暂时容得下插入的数据,COMMIT可以尽量设高一点(kettle有限制不能超过50000)
4、针对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;
5、如果是通过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过短
6、Kettle增量同步数据的五种方式
增量抽取常用的捕获变化数据的方法
1:触发器(又称快照式)---会降低源数据库的性能,所以一般不会采取
介绍:在抽取的表上建立需要的触发器,一般要建立插入,修改,删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时表,抽取线程
从临时表中抽取数据,临时表中抽取过的数据被标记或是删除。
----------------------------------------------------------------------------------------------------------------------------
增量抽取时的触发器建立,针对三种触发器,如何写入临时表,如何从临时表中抽取,如何标记或者删除临时表数据。
----------------------------------------------------------------------------------------------------------------------------
优点:数据抽取的性能高,ETL加载规则简单,速度快,不需要修改业务系统表结构,可以实现数据的递增加载。
缺点:要求业务系统建立触发器,对业务系统有一定的影响,容易对源数据库构成威胁。(会降低数据库的性能,所以一般不采用)
2:时间戳方式(比较常用)
介绍:它是一种基于快照比较的变化数据捕获方式,在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值。当进行数据抽取时,通过比较上次
抽取时间与时间戳字段的值来决定抽取那些数据。有的数据库的时间戳支持自动更新,即表的其他字段的数据发生变化时,自动更新时间戳字段。有的数据库不支持时间戳的自动
更新,这就要求业务系统在更新业务数据时,手工更新时间戳字段。
---------------------------------------------------------------------------------------------------------------------------
通过什么方式来更新时间戳,如何比较抽取时间与源表时间戳字段,如何决定抽取那些数据,如何实现抽取。
---------------------------------------------------------------------------------------------------------------------------
优点:同触发器方式一样,时间戳方式的性能也比较好,ETL系统设计清晰,源数据抽取相对清楚简单,可以实现数据的递增加载。
缺点:时间戳维护需要由业务系统完成,对业务系统有很大的倾入性(加入额外的时间戳字段),特别是对不支持时间戳的自动更新的数据库,还要求业务系统进行额外的更新时间戳
操作;另外,无法捕获对时间戳以前数据的delete和update操作,在数据准确上受到一定的限制。
3:全表删除插入方式
介绍:每次ETL操作均删除目标表数据,由ETL全新加载数据。
优点:ETL加载规则简单,速度快。
缺点:对于维表加外键不合适,当业务系统产生删除数据时,综合系统将不会记录到所删除的历史数据,不可以实现数据的递增加载;同时对于目标表所建立的关联关系,需要重新
进行加载。
4:全表比对方式---性能较差
介绍:全表比对的方式是ETL工具事先为要抽取的表建立一个结构类似的临时表,该临时表记录源表主键以及根据所有字段的数据计算出来,每次进行数据抽取时,对源表和临时表
进行比对,如有不同,进行update操作,若目标表没有该主键值,表示该记录还没有,则进行insert操作。
优点:对已有系统的表结构不产生影响,不需要修改业务操作程序,所有抽取工作由ETL完成,管理维护统一,可以实现数据的递增加载,没有风险。
缺点:ETL比较复杂,设计比较复杂,速度较慢,与触发器和时间戳的主动通知的方式不同,全表比对方式是被动的进行全表数据比较,性能较差,当表中没有主键或为一列且含有
重复记录时,全表对比方式的准确性较差。
5:日志表方式---较为麻烦
介绍:在业务系统中添加系统日志表,当业务数据发生变化时,更新维护日志表内容,当作ETL加载时,通过读日志表数据决定加载那些数据及如何加载。
优点:不需要修改业务系统表结构,源数据抽取清楚,速度较快,可以实现数据的递增加载。
缺点:日志表维护需要由业务系统来完成,需要对业务系统业务操作程序做修改,记录日志信息,日志表维护较为麻烦,对原有系统有较大影响,工作量大,改动较大,有一定的风险 。
7、Windos环境下利用windos服务做定时任务
1、资源库为数据库
创建启动文件,用于被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是在创建日志的时候给日志名添加上时间。
例:
2、资源库为文件夹
例:
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
3、后台运行
头部加上:
@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:
1、不刷资源库,需要更新升级IE11(https://support.microsoft.com/zh-cn/help/2847882/prerequisite-updates-for-internet-explorer-11调试环境)
2、flagfield标志字段:设置标志字段的名称,标志字段用于保存比较的结果,比较结果有下列几种。
1. “identical” – 旧数据和新数据一样
2. “changed” – 数据发生了变化;
3. “new” – 新数据中有而旧数据中没有的记录
4. “deleted” –旧数据中有而新数据中没有的记录
3、全文比对同步
特此备注下:合并记录之前先进行排序
1. 旧数据和新数据需要事先按照关键字段排序。
2. 旧数据和新数据要有相同的字段名称。
4、驱动问题
1. 解决for input string"4294967295"错误
最后的解决方案是把其他驱动删掉,只留下ojdbc14,把ojdbc4放在lib/swt下
2. 无法连接mysql数据库
经测试,kettle8.2可兼容使用的mysql最新驱动为mysql-connector-java-5.1.46-bin.jar
请务必注意驱动版本号,否则还是会报找不到驱动的错误。
Kettle入门及性能优化FAQ的更多相关文章
- SpringBoot入门-SpringBoot性能优化
SpringBoot启动优化 显示声明扫包范围: 即不使用@SpringBootApplication默认扫包,使用@ComponentScan(basePackages = { "com. ...
- kettle性能优化
普通开发电脑,如果没有网络查询步骤,kettle正常的速度应该在3000~20000条/秒.如果速度在2000条/秒一下,就可能需要调优. 性能优化的方式包括如下几种: 1.通过改变开始复制的数量(针 ...
- SQL Server 性能优化之RML Utilities:快速入门(Quick Start)(1)
SQL Server 性能优化之RML Utilities:快速入门(Quick Start)(1) 安装Quick Start工具 RML(Replay Markup Language)是MS ...
- OpenStack入门篇(五)之KVM性能优化及IO缓存介绍
1.KVM的性能优化,介绍CPU,内存,IO性能优化 KVM CPU-->qemu进行模拟ring 3-->用户应用 (用户态,用户空间)ring 0-->操作系统 (内核态,内核空 ...
- OpenCL入门:(三:GPU内存结构和性能优化)
如果我们需要优化kernel程序,我们必须知道一些GPU的底层知识,本文简单介绍一下GPU内存相关和线程调度知识,并且用一个小示例演示如何简单根据内存结构优化. 一.GPU总线寻址和合并内存访问 假设 ...
- 从零开始入门 K8s | etcd 性能优化实践
作者 | 陈星宇(宇慕) 阿里云基础技术中台技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 17 讲. 导读:etcd 是容器云平台用于存储关键元信息的组件.阿 ...
- MySQL-快速入门(14)MySQL性能优化
1.MySQL性能优化包括查询速度优化.数据库结构优化.数据库服务器优化等. 优化的切入点:合理的结构设计.表结构.索引.查询语句. 2.show status查询数据库的性能参数 show stat ...
- Linux性能优化从入门到实战:07 CPU篇:CPU性能优化方法
性能优化方法论 动手优化性能之前,需要明确以下三个问题: (1)如何评估性能优化的效果? 确定性能的量化指标.测试优化前的性能指标.测试优化后的性能指标. 量化指标的选择.至少要从应用程序 ...
- Linux性能优化从入门到实战:01 Linux性能优化学习路线
我通过阅读各种相关书籍,从操作系统原理.到 Linux内核,再到硬件驱动程序等等. 把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序.库函数.系统调用.再到内核和硬件等不同的层级贯 ...
随机推荐
- CocoaPods私有库!!!!!!!!!!!(装逼特技)
1http://www.jianshu.com/p/4b63dfbd8be7 2 修改工程下的.podspec文件,如 注意1: 验证库是否正确: pod lib lint --verbose -- ...
- 49. Group Anagrams同义词合并
[抄题]: Given an array of strings, group anagrams together. Example: Input: ["eat", "te ...
- Oracle VM VirtualBox 部署CS devcloud2 开发环境
Setting up (VirtualBox) 1. Get the new DevCloud 2.0 virtual appliance. The new image was created usi ...
- spring4-2-bean配置-6-使用外部属性文件
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAk0AAAFGCAIAAAD4tzxRAAAgAElEQVR4nO2d27HsOm+tOxWn4CeXAm ...
- SQL 数据库 学习 006 如何设置一个用户名和密码
我的电脑系统: Windows 10 64位 使用的SQL Server软件: SQL Server 2014 Express 先启动 SQL Server 2014 Management Studi ...
- cacti监控mssql 2005运行资源情况
概述:SQL Server2000\2005\2008本身不支持snmp,使用cacti监控mssql,必须通过php连接mssql来获取SQL 2005性能计算器的值. 操作步骤: 1.php连接m ...
- Python手机开发调用DLL实现部分ADB功能-乾颐堂
近期学了一点Python,然后正好有一个手机同步工具方面的预研工作要完成. 要实现PC与手机的通信,首先要找到他们的通信协议,还好的是Android有完善的协议:ADB ADB的代码是开源的,而且支持 ...
- 盒子模型 以及CSS的box-sizing属性。
盒子模型有两种 一种是 内容盒子模型 一种是边框盒子模型. 内容盒子模型(标准盒子模型)由width和height中指定的元素的尺寸不包括内边距和边框 仅是指的内容的实际尺寸: 网上搜索了两张配图不错 ...
- HashSet小试牛刀
HashSet详细介绍 import java.util.HashSet; import java.util.Iterator; public class Main { public static v ...
- Window-document-javascript
一个浏览器窗口有一个window对象,javascript属于window对象,html为document对象,属于window,body为document对象,只有设置body对象高度为100%,其 ...