如何设置KETTLEjava 多线程并行执行行全部完成后再执行后续操作

Kettle运行作业之前的初始化过程 - 为程序员服务
Kettle运行作业之前的初始化过程
本文主要描述Kettle是如何通过GUI调用代码启动线程执行作业的。
之前用英文写了一篇文章《
》 ,这篇文章只是用于英语写技术博客的一个尝试。由于很久没有使用英语写作了,故那篇文章只是简单的通过UML的序列图描述kettle运行job的一个java类调用过程。将上篇文章的序列图和这篇文章联系起来,会更加容易理解本文。
在Spoon界面点击运行按钮,Spoon GUI会调用Spoon.runFile()方法,这可以从xul文件(ui/menubar.xul)中的描述看出来。关于kettle中的xul的使用,不是本文重点故不在此说明。
public void runFile() {
executeFile(true, false, false, false, false, null, false);
public void executeFile(boolean local, boolean remote, boolean cluster,
boolean preview, boolean debug, Date replayDate, boolean safe) {
TransMeta transMeta = getActiveTransformation();
if (transMeta != null)
executeTransformation(transMeta, local, remote, cluster, preview,
debug, replayDate, safe);
JobMeta jobMeta = getActiveJob();
if (jobMeta != null)
executeJob(jobMeta, local, remote, replayDate, safe, null, 0);
public void executeJob(JobMeta jobMeta, boolean local, boolean remote,
Date replayDate, boolean safe, String startCopyName, int startCopyNr) {
delegates.jobs.executeJob(jobMeta, local, remote, replayDate, safe,
startCopyName, startCopyNr);
} catch (Exception e) {
new ErrorDialog(shell, "Execute job",
"There was an error during job execution", e);
runFile()方法内部调用executeFile()方法,executeFile方法有以下几个参数:
- local:是否本地运行
- remote:是否远程运行
- cluster:是否集群环境运行
- preview:是否预览
- debug:是否调试
- replayDate:回放时间
- safe:是否安全模式
executeFile方法会先获取当前激活的转换,如果获取结果不为空,则执行该转换;否则获取当前激活的作业,执行该作业。 本文主要讨论作业的执行过程,关于转换的执行过程,之后单独一篇文章进行讨论。
executeJob委托SpoonJobDelegate执行其内部的executeJob方法,注意,其将JobMeta传递给了executeJob方法。SpoonJobDelegate还保存着对Spoon的引用。
SpoonJobDelegate的executeJob方法主要完成以下操作:
1.设置Spoon的执行配置JobExecutionConfiguration类,该类设置变量、仓库、是否执行安全模式、日志等级等等。
2.获得当前Job对应的图形类JobGraph。
3.将执行配置类JobExecutionConfiguration的变量、参数、命令行参数设置给jobMeta。
4.如果本地执行,则调用jobGraph.startJob(executionConfiguration),如果远程执行,则委托给SpoonSlaveDelegate执行。
JobExecutionConfiguration类是保存job执行过程中的一些配置,该类会在Spoon、JobGraph类之间传递。
本文只讨论本地执行的情况,故往下查看jobGraph.startJob(executionConfiguration)方法。该方法被synchronized关键字修饰。
JobGraph类包含当前Spoon类的引用、以及对Job的引用。初始情况,Job的引用应该为null。该类会做以下操作:
1.如果job为空或者没有运行或者没有激活,则先保存,然后往下执行作业。
2.在仓库不为空的时候,通过仓库加载Job获得一个运行时的JobMeta对象,名称为runJobMeta;否则,通过文件名称直接new一个JobMeta对象,名称也为runJobMeta。
3.通过仓库和runJobMeta对象构建一个Job对象,并将jobMeta对象(此对象通过JobGraph构造方法传入)的变量、参数共享给Job对象。
4.Job对象添加JobEntry监听器、Job监听器。
5.调用Job的start方法,启动线程开始执行一个job。
Job继承自Thread类,该类的run方法内部会递归执行该作业内部的作业项,限于篇幅,本文不做深究。
Rumblings by a Java guy on Java, Hadoop, Pentaho, Python and so on
原文地址:, 感谢原作者分享。
您可能感兴趣的代码后使用快捷导航没有帐号?
查看: 1417|回复: 4
有关kettle的转换中的执行顺序
中级会员, 积分 439, 距离下一级还需 61 积分
论坛徽章:6
我在一个项目里面kettle跑死了,也不报错。结果晚上1:00运行的job到第二天还没有结果。
后来经过排查,发现是一个转换中的,第3个步骤是一条update的,在第2个步骤插入10000条记录以后,就启动了这个sql,可能是sql和插入发生了死锁。
那么问题来了,kettle的转换中,是前一个步骤全部跑完再跑下一个,还是每10000条记录把所有的步骤跑一遍?
高级会员, 积分 691, 距离下一级还需 309 积分
论坛徽章:13
论坛徽章:26
高级会员, 积分 509, 距离下一级还需 491 积分
论坛徽章:4
应该是并行的吧
论坛徽章:25
那你把这两个操作放在两个转换里边做呢 我觉得应该是串行的 前面做完才会做后面的
dataguru.cn All Right Reserved.kettle中的job任务,执行顺序_百度知道
kettle中的job任务,执行顺序
您的回答被采纳后将获得:
系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
我有更好的答案
如上图是没有确定的执行顺序的
这个执行顺序 是根据你添加转换的先后顺序来的,即你添加转换时它的命名为转换1、转换2、转换3。那顺序即为1到3
为您推荐:
其他类似问题
kettle的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。kettle能让job,转换并行执行吗,是不是只能让步骤多线程执行_百度知道
kettle能让job,转换并行执行吗,是不是只能让步骤多线程执行
我有更好的答案
键入“crontab-e”.键盘敲击exc.将pdi-ce-4,当crond执行kettle任务时.zipunzippdi-ce-4.1.0-usr&#47,重启crond服务5.等待执行结果6.执行成功,设置java环境变量的语句必不可少;java/jre1;  3.赋予解压目录下;test.kjb&gt,命令行键入“:wq”,保存文件;lib&#47,需要动态设置java环境变量,crond才能找到java命令。最后。  3;crondrestart”;/mnt/kettle&#47,*为星期几;JSCDL/lib/kettle&quot.bin  5.启动安装过程.:$JAVA_HOME/mnt/jre1.6.0_23目录中。当安装完成时.进入解压目录,键入“./mnt&#47.1,它不归属于任何用户.sh  其中23为分钟,敲击键盘将以下内容输入到文件  JAVA_HOME=/usr/java&#47,10为日,02为月,您将看到Done(完成)字样。  (三)配置java环境变量  1;kettle/*.sh”,赋予test,虽然之前以root身份配置了java的环境变量;java/关于超级用户访问权限的说明:要将JRE安装在系统级位置(例如&#47。键入:;kitchen,使用crontab命令添加定时任务1.在终端上;jre-6u23-linux-x64.bin&File=jre-6u23-linux-x64.bin  (二)安装jre-6u23-linux-x64.6.txt说明;local),必须以超级用户身份登录,从而获得必要的权限。如果您不具有超级用户访问权限,11为小时.bin  下载地址;ESD6/JSCDL/jdk/6u23-b05/init.d”.jar&#47,oh.;mnt&#47:/ESD6&#47,配置java环境变量(一)下载jre-6u23-linux-x64:  *&#47.0-stable.zip上传到linux服务器  2.使用unzip命令解压pdi-ce-4.1.0-stable。  7.JRE安装在其自身的目录中.bin此时将显示二进制许可协议:$PATHexportCLASSPATH=,但是crond一样找不到java命令,所以,对文件进行编辑输入如下内容;etc/usr&#47,进入该目录键入“./kitchen,编写执行kettle任务的shell脚本创建test.kettle/test:前3行.命令行键入“viprofile”打开profile文件  3.敲击键盘ctrl+F到文件末尾  4:$JAVA_HOME/lib/tools.jar  exportJAVA_HOME  exportPATH  exportCLASSPATH  5:$JAVA_HOME/lib/6u23-b05/jre-6u23-linux-x64;mnt/tools.sh-file=/mnt/kettle/usr&#47.jar.bin。类型:chmoda+xjre-6u23-linux-x64.sh文件的执行权力  chmod+x*;kettle/data-integration/java/目录中安装软件,请键入:cd&#47.重新登录linux./jre-6u23-linux-x64;jdk&#47,安装jre,如果有帮助信息则表示kettle环境部署成功※(重点)接着;jre1.6.0_23  PATH=$JAVA_HOME/bin:$PATH  CLASSPATH=.;dt.jar:$JAVA_HOME&#47,在命令行键入“java”,如果出现帮助信息则表示配置成功。然后,将以下内容复制粘贴到里面,然后键入“chmod+x&#47.键入“a”.0_23exportPATH=$JAVA_HOME&#47,因为crond是个守护进程,进入定时任务文件2.sh”回车;display.在末尾处,即第一个~的地方.zip-d&&#47,crontab命令的使用这里不再赘述。3.键盘敲击exc,终端键入“:wq”,保存文件4.重启crond服务键入“cd&#47.bin  将jre-6u23-linux-x64.bin上传到linux服务器  1.在终端上.切换到所需的安装目录。类型;6:cd例如,要在&#47.命令行键入“cd/etc”进入etc目录  2;usr&#47.sh执行权限。  exportJAVA_HOME=&#47,请将JRE安装在您的主目录中,或者安装在您具有写入权限的子目录中。  4.将您下载的文件的权限更改为可执行,键入:su  2.输入超级用户口令?AuthParam=_2abc6c61c57eec5b100fef33&TicketId=CJ0nhpzNkjGGwpbkW40LAgA=&GroupName=CDS&FilePath=&#47由于第一次碰linux,对其不是很了解,导致这个问题困扰了我近一个月的时间,现在终于解决了,分享给大家。首先。在本例中,它将安装在/usr/java&#47.sh  4。通读许可协议。按空格键显示下一页。读完许可协议后,输入yes继续安装(此步骤可能直接跳过),部署kettle1;bin
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。关于Kettle的事务和转换内步骤的顺序执行
近来有项目中遇到Kettle事务处理和转换内步骤顺序执行的问题。为此进行了研究,找到了一个解决办法。
在Kettle中,一个Job内的转换,缺省是顺序执行的;一个转换内的步骤,缺省是并行执行的。但是,社区版不支持job内的事务处理,只支持转换内的事务。因此,如果要做顺序操作,且支持事务,需要如下处理:
根据业务需要,使用&阻塞数据直到步骤都完成&在转换内设置顺序执行的内容;
设置转换只使用一个事务。转换设置&&杂项&&使用唯一连接。
设置转换内的表插入等数据库操作不进行批量提交。&提交记录数量& && 0
下面是我做的一个测试例子,已经测试通过,可以参考。
Author: galaxy
24.4.1 ( mode 8.2.10)
阅读(...) 评论()}

我要回帖

更多关于 shell并行执行 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信