Kettle性能调优的一些笔记

  • 4
  • 259 views
  • A+
所属分类:数据分析

kettle本身的性能绝对是能够应对大型应用的,一般的基于平均行长150的一条记录,假设源数据库,目标数据库以及kettle都分别在几台机器上(最常见的桌面工作模式,双核,1G内存),速度大概都可以到5000 行每秒左右,如果把硬件提高一些,性能还可以提升 , 但是ETL 过程中难免遇到性能问题,下面一些通用的步骤也许能给你一些帮助.

1.修改spoon脚本的jvm参数
#情景:运行过程中,报OOM错误或者是运行很慢的情况下,需要修改jvm内存
#例如:我的kettle是安装在/usr/local/kettle下
sudo vim /usr/local/kettle/spoon.sh
修改:PENTAHO_DI_JAVA_OPTIONS="-Xms1024m -Xmx2048m -XX:MaxPermSize=256m"
我电脑内存是8GB,操作系统是Linux,内存充足,因此我调整为下面的(具体量力而行):
PENTAHO_DI_JAVA_OPTIONS="-Xms2048m -Xmx4096m -XX:MaxPermSize=512m"

2.修改日志输出级别
默认的情况下,kettle输出的是基本日志,如果访问十几万的数据库,那基本日志的输出也会达到5、6百兆,这样严重影响了执行效率,所以修改kettle的日志级别为error级,只输出错误日志即可。
配置:Action => Run options => Log level => Only error
或者在运行监控窗口输入日志的Tab叶签上点击设置图标也行。

3.关于性能的其他事项
#尽量使用数据库连接池
#尽量提高批处理的commit size,减少commit次数
#尽量使用缓存,缓存尽量大一些(主要是文本文件和数据流)
#Kettle 是Java 做的,尽量用大一点的内存参数启动Kettle
#可以使用sql 来做的一些操作尽量用sql
#Group , merge , stream lookup ,split field 这些操作都是比较慢的,想办法避免他们,能用sql 就用sql
#插入大量数据的时候尽量把索引删掉
#尽量避免使用update , delete 操作,尤其是update , 如果可以把update 变成先delete ,后insert
#能使用truncate table 的时候,就不要使用delete all row 这种类似sql
#合理的分区
#如果删除操作是基于某一个分区的,就不要使用delete row 这种方式(不管是delete sql 还是delete 步骤),直接把分区drop 掉,再重新创建
#尽量缩小输入的数据集的大小(增量更新也是为了这个目的)
#尽量使用数据库原生的方式装载文本文件(Oracle 的sqlloader , mysql 的bulk loader 步骤)
#尽量不要用kettle 的calculate 计算步骤,能用数据库本身的sql 就用sql ,不能用sql 就尽量想办法用procedure , 实在不行才是calculate 步骤.
#要知道你的性能瓶颈在哪,可能有时候你使用了不恰当的方式,导致整个操作都变慢,观察kettle log 生成的方式来了解你的ETL操作最慢的地方。
#远程数据库用文件+FTP 的方式来传数据 ,文件要压缩。(只要不是局域网都可以认为是远程连接)

注意:
1.不要使用中文,否则很多菜单、标签的翻译都看不懂,影响工作
将语言调整为英文的方法:Tools => Options => Look & Feel => 最下边把语言全部选择为English(US)

2.开发过程中制作的转换等最好另存一份,以免操作失误覆盖或删除

参考文档:
https://blog.csdn.net/u011031430/article/details/76183960
http://wiselyman.iteye.com/blog/2411583

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  4   博主  0

    • ag

      配置kettle的jvm为4GB,实测10万条数据4秒钟迁移完毕。

      • ag

        lib目录:存放jar包,包括jdbc驱动包。
        pwd目录:Kettle集群配置文件。
        samples:自带的示例。
        simple-jndi:JNDI连接的配置。
        Carte.bat / Carte.sh 启动集群命令。
        Encr.bat / Encr.sh Kettle提供的加密算法。
        Kitchen.bat / Kitchen.sh 运行Job的命令。
        Pan.bat / Pan.sh 运行转换的命令。
        set-pentaho-env.bat / set-pentaho-env.sh 设置环境变量脚本。
        Spoon.bat / Spoon.sh 启动KettleUI界面。
        SpoonDebug.bat / SpoonDebug.sh 以debug方式启动Kettle。
        安装JDK,设置JAVA_HOME变量并加入环境变量。
        Windows 下双击Spoon.bat启动Kettle(Linux下执行sh spoon.sh)

        • ag

          在软件开发中,经常会遇到这样的场景: 新开发的系统即将替换老系统,而老系统庞大的数据需迁移到新系统中,但数据结构与新系统不完全兼容,这种情况就可以用Kettle处理这些老数据,完成数据迁移任务的。

          • ag

            最近发现就算不用Kettle来做ETL,用他来做数据迁移也挺好的用的、比起很多付费工具还nice,尤其是源数据库和目标数据库不是同类型的时候。