kettle转换之多线程

kettle转换之多线程

 

ETL项目中性能方面的考虑通常是最重要的,特别是所讨论的任务频繁执行,或一些列的任务必须在固定的时间内执行。本文重点介绍利用kettle转换的多线程特性,以优化其性能。

假设转换中的每个步骤已经设置成最快的执行速度并且调节性能至最佳,且再没有更多的性能提升空间。但是利用kettle的多线程特性仍然可能提升转换的整体性能。

调整队列大小

当尝试优化性能时,你可以调整输入、输出队列的大小。特别是如果你有足够多的内存(RAM)可用。在kettle转换中配置队列大小是转换配置中的“Nr of rows in rows”选项的大小,其配置对转换中所有的步骤都有效。增加可使转换更快执行完活动的步骤,从而释放CPU时间给后续步骤。针对特定转换调节合适大小最佳实践。

设置步骤执行拷贝数

kettle转换在运行时,每个步骤可被看成一个带着输入、输出行队列的工作线程,每个线程是并行运行的,当数据化是有效时即处理。kettle允许针对每个独立步骤手工定义其线程数。如果转换有一个瓶颈步骤,该步骤有多个实例同时运行可以加快处理速度。可以通过检查每个步骤的输入、输出队列及行/秒的处理性能找到候选的瓶颈步骤。如果某步骤有满输入队列,空输出队列,并每秒处理行数低,这些因素往往决定了整个转换的性能,从而找到瓶颈步骤。这些因素的数据在kettle执行“Step Metrics”视图中可以看到。

右击问题步骤,选择“change number ofcopies to start..”并输入合适的线程数,这时当你运行转换时,你将注意到多个运行的实例,每个实例在视图中有自己的输入、输出队列。

转换的整体性能提升取决于每个步骤的性能及操作系统和硬件性能。如:如果cpu性能强,“计算”步骤性能就佳;数据库查询步骤可以通过多线程提升性能;其他步骤如”update“步骤不太可能提升性能,但是和RDBMS有很多关系。

需要注意的是步骤启用多线程也有它的局限性。更具体地,如果问题的步骤中或之后,依赖所有数据行的排列顺序时,该转换将不能正确的运行。每个步骤的多个线程都独立地接收并处理他们的数据行,因此不能保证所有数据行驶按顺序处理。另外需要提醒的是,每个线程保持自己的独立内部状态,并不能看到其他线程正处理的行。因此,如果某个步骤必须看到所有的行,才能正常工作,那一定不能使用多线程。”Sort rows”, “Unique rows” 和 “Rowdenormalizer”就是最好的例子。这这些步骤使用多线程是没有意义的,因为每个线程处理行仅仅是所有行的一个子集。

结论

kettle允许转换中的每个单独定义多个线程执行,同时可以也设置输入、输出队列大小,两个特性对提升执行速度非常有用。针对单个步骤启动多线程,两点事实需要考虑的是,每个线程不能看到整个数据行,且每个线程处理行顺序不确定。

时间: 2024-08-26 16:52:32

kettle转换之多线程的相关文章

kettle转换提高性能拆分转换步骤_20161201

今天是12月1号,前期用kettle做了月报自动报表的转换和作业,今天运行时候发现一个报表的程序跑起来失败,心里很纳闷,上过月刚跑的没问题,怎么会无缘无故的失败. 通过看kettle运行日志,发现一个错误,c盘left no space 也就是在系统盘上没有足够的空间存储临时表,这时候才考虑到可能是在转换的步骤里设置的步骤过多,有很多个表输入, 由于kettle输出执行顺序是自上而下,但是输入是无序的,在很多步骤同时输入的时候就会占用很大的内存,性能就会很慢. 打开那个出问题的kettle转换文

java中调用kettle转换文件

java中调用kettle转换文件 通过命令行也可以调用,然后java中调用命令行代码也可以:这样没有和java代码逻辑无缝集成.本文说明kettle5.1中如果通过其他API和java代码无缝集成:网上大多数资料都是低版本的,在kettle5.x中已经不能运行. 1.       需要哪些jar文件 以kettle开头的是必须,上图最下面三个也要:红色框中的两个是我测试转换用到的,分别是生成UUID和文件. 要是少了jar文件,运行程序一定报错,大家根据错误到kettle安装目录LIB中找相应

kettle转换JavaScript获取命令行参数

日常开发中由于很多参数是变化的,需要在部署时才能确定.而写在配置文件里又显得很笨重,因而可以运行时实时指定.那么kettle是怎么获取命令行中的参数的呢? kettle可以通过转换里的JavaScript获取变量 _step_.getTransMeta().getArguments()[0];

使用kettle转换中的JavaScript对密码进行加密和解密

日常开发中,为了确保账号和密码的安全,时常要对密码进行加密和解密.然而kettle是怎么对密码进行加密和解密的呢? 下面的代码需要再转换中的JavaScript中运行. var encrypted_password = 'not encrypted'; 加密(js中调用): encrypted_password = "Encrypted " + Packages.org.pentaho.di.core.encryption.Encr.encryptPassword(clear_pass

kettle转换和作业插件开发及调试

这是一篇几年前写下的文档,最近打算根据这篇文档重写一下kettle插件的教程.结果各种理由,一推再推.今天索性将这篇文档发布出来,分享给大家,例子等有空再补上.这是一篇基于kettle3.2基础上完成的kettle插件文档.然而现在最新版的kettle的界面已经完全变了样了,但是那些组件还是那么熟悉.对数据处理稍微熟悉点的应该对kettle都不陌生,kettle是一个快速格式化和数据抽取的工具.好吧,入正题: 如果你对kettle插件感兴趣可以到官网查看更多的资料:http://www.pent

kettle转换JavaScript加载外部js文件

日常开发中,时常会出现这样一种情况.有大量的函数是通用的.而每个JavaScript里面写一遍,给维护带来很大的困扰.因而需要将公共的函数写在外部js文件中.这时就需要引入外部的公共文件了.下面是在转换里的JavaScript组件中引入外部公共js文件. //加载js文件 LoadScriptFile(getVariable("Internal.Transformation.Filename.Directory", "") +"/common_Functi

kettle转换js实现MD5加密

//Script here   js文件与转换文件保存路径一样LoadScriptFile(getVariable("Internal.Transformation.Filename.Directory", "") +"/MD5.js");var pass = username + "superadmin"+"1qazxsw2"; var password = hex_md5(hex_md5(pass));

Kettle转换或作业乱码

结果这样做还是乱码,其实这和

Kettle之数据抽取、转换、装载

Kettle 官网 ETL利器Kettle实战应用解析系列 利用kettle组件导入excel文件到数据库 kettle中实现动态SQL查询 java中调用kettle转换文件