java程序控制KETTLE JOB的执行
有时候我们想在java程序中触发远程服务器上kettle job的执行,并且获得执行结果。kettle的carte提供了远程执行job和transfer的功能。
我使用的kettle是6.1版本,部署在linux服务器上,没有使用资源库。
下面介绍下各个步骤:为了方便以windows系统为例
1、开启carte服务,在kettle安装目录下,运行Carte.bat,直接上图
直接打Carte.bat后面不带任何参数就可以看到参数介绍,我这里在本机8081端口开启服务,看到最后的文字说明服务启动成功。
2、在浏览器中查看kettle 状态
在浏览器中输入http://172.20.17.113:8081,会提示输入密码,这里先直接输入cluster/cluster,然后可以进入,页面上会显示通过carte执行的job和transfer的状态。
那么这个用户名密码在哪设置呢?我找了半天,也是网上看前辈指引,原来是在kettle安装目录/pwd下面,大家可以看到有carte-config-8081到8084这些配置文件,还有carte-config-master-8080.xml,应该是做主从集群用的,先不管了。
打开carte-config-8081.xml就可以看到
<slaveserver>
<name>slave1-8081</name>
<hostname>localhost</hostname>
<port>8081</port>
<username>cluster</username>
<password>cluster</password>
<master>N</master>
</slaveserver>
端口号跟用户名密码的默认配置都在这里了。
3、使用java触发JOB执行。
下面介绍真正要做的事情了,建立java project。把kettle安装目录/lib下面相关jar包依赖上去。需要的包挺多的,懒得话全部依赖吧。我这边依赖这些包就够了,因为用到了spring读取文件的工具,也依赖了spring的包。
代码逻辑如下:
package com.lzh.kettle; import org.pentaho.di.cluster.SlaveServer;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.Result;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobExecutionConfiguration;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.www.SlaveServerJobStatus;
import org.springframework.core.io.FileSystemResource; public class kettleRemoteDemo {
public static void main(String[] args) {
String jobPath = "E:\\ws0815\\xnol-reporting-app-trunk\\etl\\kettle\\jobs\\jb_current_account_order_latest5.kjb";
try {
KettleEnvironment.init(); SlaveServer remoteSlaveServer = new SlaveServer();
remoteSlaveServer.setHostname("172.20.17.113");// 设置远程IP
remoteSlaveServer.setPort("8081");// 端口
remoteSlaveServer.setUsername("cluster");
remoteSlaveServer.setPassword("cluster");
FileSystemResource r = new FileSystemResource(jobPath);
// jobname 是Job脚本的路径及名称
JobMeta jobMeta = new JobMeta(r.getInputStream(), null, null); JobExecutionConfiguration jobExecutionConfiguration = new JobExecutionConfiguration();
jobExecutionConfiguration.setRemoteServer(remoteSlaveServer);// 配置远程服务 String lastCarteObjectId = Job.sendToSlaveServer(jobMeta, jobExecutionConfiguration, null, null);
System.out.println("lastCarteObjectId=" + lastCarteObjectId);
SlaveServerJobStatus jobStatus = null;
do {
Thread.sleep(5000);
jobStatus = remoteSlaveServer.getJobStatus(jobMeta.getName(), lastCarteObjectId, 0);
} while (jobStatus != null && jobStatus.isRunning());
Result oneResult = new Result();
System.out.println(jobStatus);
if (jobStatus.getResult() != null) {
// 流程完成,得到结果
oneResult = jobStatus.getResult();
System.out.println("Result:" + oneResult);
} else {
System.out.println("取到空了");
}
} catch (Exception e1) {
e1.printStackTrace();
} }
}
这里因为job执行需要一些时间,我代码里面每隔5秒去拿一下结果,拿到结果确定job是否执行完成。
这时候如果我们去浏览器查看,可以看到job正在执行的状态。
执行完成之后Running会变成Finish,如果有异常,status也会有提示。在命令行下面也会有job执行的日志信息。
大致过程就是这样,但是我研究的时候还是花了不少时间,网上资料不是很多,我这个算是完整介绍吧。
还有一个问题就是,我的job文件需要在本地保存一份,最开始我一直想的是我的job文件放到KETTLE所在服务器上,在代码中我指定指向job文件的路劲即可,但是运行的时候,kettle总是去本地路劲找文件然后找不到就报错。后来我想可能我的这种想法需要依赖kettle的资源库才能实现。而我没有使用资源库所以我必须在我java程序所在服务器放置job文件,然后去kettle所在远程服务器执行。
如果有朋友能解决我最后的疑虑,还望留言指点。谢谢!
java程序控制KETTLE JOB的执行的更多相关文章
- java调用kettle的job和transfer工具类
package com.woaiyitiaocai.util; import java.util.Map; import java.util.UUID; import org.apache.log4j ...
- 【Kettle】Java借助Kettle将Excel导入数据
示例功能(仅供测试): 在JAVA项目中,将数据从Excel文件导入数据库中.实现该能有多种方法,而本例则是“不走寻常路”,尝试借助Kettle实现数据导入. 原理: Java中调用存储在Kettle ...
- java中如何生成可执行的jar文件
java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$ ...
- "Java 反序列化"过程远程命令执行漏洞
一.漏洞描述 国外 FoxGlove 安全研究团队于2015年11月06日在其博客上公开了一篇关于常见 Java 应用如何利用反序列化操作进行远程命令执行的文章.原博文所提到的 Java 应用都使 ...
- 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...
- 在windows下使用cmd命令行对java文件进行编译和执行
windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量 相关配置链接:java基础学习总结—— ...
- Java Swing jpanel paint方法执行两次的问题
Java Swing jpanel paint方法执行两次的问题: 在其他环境下执行了两次,自己测试怎么都是执行了一次,记录一下这个问题:需要后继工作: 可能是进行各种参数设置的时候导致了paint方 ...
- java之生成可重复执行的sql脚本
在实际项目开发过程中,sql脚本需要多次执行.而一般的DML和DDL语句一般只能执行一次,再次执行执行时就会报错(操作对应已存在/不存在),所以必须将sql脚本生成可重复执行的.本文共分为4部分:1. ...
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
本文作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/25745945 内容简介: ------------ ...
随机推荐
- RHEL6.5恢复root密码
1.开机上下键停留在如下界面,键盘输入小写e: 2.选择如下选项,并输入小写e: 3.输入1,回车进入单用户模式: 4.键盘输入小写b,进行启动: 5.进入到单用户模式: 6.修改root用户密码,并 ...
- TensorFlow实现FM
看了网上的一些用tf实现的FM,很多都没有考虑FM实际使用中数据样本稀疏的问题. 我在实现的时候使用 embedding_lookup_sparse来解决这个问题. 对于二阶部分,由于embeddin ...
- 递归--练习1--noi3089爬楼梯
递归--练习1--noi3089爬楼梯 一.心得 根据输入,是要写连续输入多个值的程序 二.题目 3089:爬楼梯 总时间限制: 1000ms 内存限制: 65536kB 描述 树老师爬楼梯,他可 ...
- virtualbox上,android x86 的分辨率的设置
参考文章: http://stackoverflow.com/questions/6202342/switch-android-x86-screen-resolution 1) 用VBoxManage ...
- 安装 android4.0 到 vmware的注意点
我发现无论如何,wmware上是出不来声音的. 我放弃 android-x86-4.3-20130725.iso 在 声音上有问题 现在安装这个版本: android-x86-4.0-RC2-eeep ...
- 个人知识管理系统Version1.0开发记录(06)
demo view 夜已深,我们先简单演示一下,完成一个小段落了.涉及工具及技术知识:图形处理软件photoshop cs6,js类库ext. 思路如下: 1.下载ps6,有破解版本的,dll文件覆盖 ...
- IOS-网络(数据安全:MD5加密)
// // ViewController.m // IOS_0129_HTTP请求 // // Created by ma c on 16/1/29. // Copyright © 2016年 博文科 ...
- 利用Bomb打造自己的小程序
小程序开发 Bomb免费后端云开发 首先,小程序的开发已是热门,一个前段技术人员必备的技术就是开发小程序.在这里推荐一个入门小程序文章(连胜出品). 对于小程序的入门开发就不再做详细介绍,这里针对Bm ...
- ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载(一)
ExtAPI 下载地址如下,包含各个版本 http://docs.sencha.com/misc/guides/offline_docs.html 1.使用工具HBuilder 2.java 版本 8 ...
- JQuery中绑定事件(bind())和移除事件(unbind())
有时候事件执行完了,想取消事件的效果可以通过一定的办法来处理.比如bind()(绑定事件)和unbind()(移除通过bind()方法添加的事件)方法来移除事件的效果. 比如下面的一个案例: 复制代码 ...