zoukankan      html  css  js  c++  java
  • Kettle入门及性能优化FAQ

    1、安装

    配置Java环境

    Java环境配置问题

    java_home:D:Program FilesJavajdk1.7.0_25(安装jdk路径)

    classpath:.;%java_home%libdt.jar;%java_home%lib ools.jar

    path:在path路径中添加%java_home%in;%java_home%jrein;

    kettle_home:D:Program Filesdata-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给自己分配的非堆栈内存(供虚拟机程序自己开销)我的因 为是在服务器上跑,因此改成了8192M8192M4096M,这个改不能是无限的加大,需要考虑总的内存大小,一般来说网上参考是最大堆栈内存不超过总内存的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-353data-integration

    3 kitchen.bat -rep:XXX -dir:/ -job:"XXX" -user:XXX -pass:XXX -level:Basic -log:D:kettlebatlog每日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:kettlepdi-ce-8.2.0.0-342data-integration      

    pan.bat /rep local /trans test1 -level=basic>C:kettle est1.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

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

     

  • 相关阅读:
    Linux下使用cut切割有规则的列文本
    注解相关
    修改Feign数据解析,由jackson改为fastjson,同时解决fastjson中Content-Type问题
    Spring Data JPA整合REST客户端Feign时: 分页查询的反序列化报错的问题
    Aliyun STS Java SDK示例
    GIT : IDEA切换到某个tag
    [LeetCode] 351. Android Unlock Patterns 安卓解锁模式
    QSpinBox 和 QSlider 联合使用方法
    Qt 控件随窗口缩放
    [LeetCode] 350. Intersection of Two Arrays II 两个数组相交之二
  • 原文地址:https://www.cnblogs.com/liuqi-beijing/p/10601776.html
Copyright © 2011-2022 走看看