烦请哪位大神指导下怎么实现java调用kettle

烦请哪位大神指导下怎么实现java调用kettle,第1张

package org.gdh.kettle.transform

import org.pentaho.di.core.KettleEnvironment

import org.pentaho.di.core.exception.KettleException

import org.pentaho.di.core.exception.KettleXMLException

import org.pentaho.di.job.Job

import org.pentaho.di.job.JobMeta

import org.pentaho.di.trans.Trans

import org.pentaho.di.trans.TransMeta

public class ReadJob {

public static void runJob(String jobname){

try {

KettleEnvironment.init()

//jobname 是Job脚本的路径及名称

JobMeta jobMeta = new JobMeta(jobname, null)

Job job = new Job(null, jobMeta)

//向Job 脚本传递参数,脚本中获取参数值:${参数名}

// job.setVariable(paraname, paravalue)

job.start()

job.waitUntilFinished()

if (job.getErrors() >0) {

System.out.println("decompress fail!")

}

} catch (KettleException e) {

System.out.println(e)

}

}

// 调用Transformation示例:

public static void runTrans(String filename) {

try {

KettleEnvironment.init()

TransMeta transMeta = new TransMeta(filename)

Trans trans = new Trans(transMeta)

trans.prepareExecution(null)

trans.startThreads()

trans.waitUntilFinished()

if (trans.getErrors()!=0) {

System.out.println("Error")

}

} catch (KettleXMLException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (KettleException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

public static void main(String[] args) {

String jobname="D:/syslog_All/spoon/job_csv_bsf.kjb"

runJob(jobname)

// String filename="D:/syslog_All/spoon/csv_fm.ktr"

// runTrans(filename)

}

}

之前借用别人的笔记本配置了kettle, 开发完成后更换了自己的笔记本, 再次配置kettle的时候发现kettle打不开了, 现在附上安装kettle流程和遇到问题解决的思路和办法

        这次工作中用到的是经过公司封装的kettle, 免安装版, 不是公司封装的也是免安装的好像, 只需要将压缩包解压即可

        kettle是一个纯java开发的工具, 所以配置kettle之前一定要配置上java环境, 网上说java版本至少要在1.6以上, 但是自己安装中发现只有1.8版本的jdk可以正常运行kettle, 这个应该跟kettle的版本也有关, 为此我同时安装了1.6、1.7、1.8三个版本的jdk.

        jdk的配置这里就不讲了, kettle的配置本身只需要一个环境变量, 新建一个变量名为 KETTLE_HOME , 变量值为 压缩包解压路径 的环境变量即可

    环境和安装都完成后, 我们直接打开kettle解压目录, 运行Spoon.bat文件就可以打开kettle了, 但这才是我遇到问题的开始

    1) 如果电脑内存不大的话可能会遇到创建JVM失败的提示(ERROR:could not create the java virtual machine!), 这是因为kettle默认给JVM虚拟机分配的内存比较大, 我们给他调小一点, 打开Spoon.bat, 将

改为

    2) 如果遇到提示could not find the main class. Program will exit! 这表示你的jdk有问题, 这不单单是kettle会出现这个提示, 任何java程序如果jdk出现问题, 或者jdk版本不对都有可能报这个错, 我们重新安装一遍jdk或者换个版本就可以解决这个问题.

    在kettle这里我们可以单独为kettle配置一个环境变量以解决这个问题, (感觉这个方式是为了解决kettle的jdk版本和当前系统不一样的问题), 在环境变量中创建一个变量名为  PENTAHO_JAVA_HOME , 变量值为 kettle兼容的jdk版本路径 即可.

    这个时候我们的系统变量里有两个指向jdk路径的变量, 一个是java_home,一个是pentaho_java_home, 感觉这是为了解决kettle需要的jdk与当前系统中的jdk不一样的办法.

    运行Spoon.bat的时候, d出cmd终端窗口, 直接闪退.

    遇到这个问题真的是把我给难住了, 一点没有错误信息, 没有排查问题的切入点, 

思考 :

    .bat文件应该是一个脚本语言, 它调用其他的文件才能启动kettle, 它d出cmd后没有报错而是退出了, 应该是运行的没有问题, 下面它应该启动kettle了, 但是没有动静, 这就可能是它调用其他文件的时候, 其他文件损坏了或者丢失了. 我们重新安装一下这个软件可以排除这个问题.

    我最开始觉得解压后的kettle有问题, 把kettle删了, 再删的时候等不及又往桌面解压kettle...虽然没有提示, 但是肯定是这删了点什么文件...后来又重新装了一遍才解决.

    解决这种问题的时候 只能靠自己, 千万不能慌, 要稳定心态, 思考启动的流程, 是哪个流程出现了错误, 这样才能解决问题 , 不然会卡很久, 严重降低工作效率. 心态不好的时候, 可以稍微歇5分钟, 计算机这种东西, 说不定重启都能解决bug, 透透气, 换个角度看


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12098414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存