【转】Kettle(Pentaho)实现web方式远程执行job或transformation

Kettle(Pentaho)实现web方式远程执行job或transformation

一、背景

     公司在用kettle做数据etl,每做完一个job或transformation发布上线想要立即执行看数据效果的话每次都是找运维同学登陆服务器打开kettle找到对应的文件点击执行,整个过程效率低下,不仅占用运维时间,期间自己也在白白等待,浪费生命。

     google “kettle remotely execute” 得知,这个是有解决方案的,其实kettle 本身就自带了此解决方案,只是一直忙于工作无(lan)暇(de)研究。大致就是利用kettle自带的Carte  开启一个web服务器,再加上job 或transformation做一点配置即可实现登录web来触发执行某一任务。

二、准备工作

     此博客基于windows服务器

     1.下载Java JDK,版本1.5以上,如果之前已经安装且版本混乱之类,直接先卸载再重新下载一个安装

     2.下载kettle。kettle绿色无需安装,下载完之后解压到指定的文件夹即可,同时请配置系统环境变量(PENTAHO_JAVA_HOME),value指定到安装的jdk对应的jre的目录(如下图),并找到Spoon.bat点击打开kettle。

  

     请注意,是指定到jre的目录,不要搞错

     

三、开启服务器

    基于第二步准备工作之后,请确保能正确打开kettle 软件。如果有问题无法正常打开,google解决方案。

    我们先看到kettle的根目录,5.0之后的kettle 在根目录下会有Carte.bat(.sh是linux系统下使用的),我们要使用的就是它

    

     window下 打开cmd,cd切换到kettle的根目录:

  

    然后执行命令行,开启一个web服务器。 

1

carte.bat 127.0.0.1 8081

    等待十几秒,如出现下图提示即表示服务器开启成功

    

    这一步成功的前提是 PENTAHO_JAVA_HOME环境变量配置正确,不然会提示java.exe找不到错误。

    成功之后我们就可以浏览器打开 http:127.0.0.1:8081 看效果了,会给一个弹出框要求你输入账号密码验证:

    

    这个账号密码是什么呢?别急,我们回到kettle的根目录下,找到pwd文件夹,双击进入,发现如下几个文件:

    

    咱们的账号密码就配置在里面,打开-8081的xml文件:

复制代码

<?xml version="1.0"?>
-<slave_config>
<!-- Document description... - masters: You can list the slave servers to which this slave has to report back to. If this is a master, we will contact the other masters to get a list of all the slaves in the cluster. - report_to_masters : send a message to the defined masters to let them know we exist (Y/N) - slaveserver : specify the slave server details of this carte instance. IMPORTANT : the username and password specified here are used by the master instances to connect to this slave. -->
-<masters>
-<slaveserver>
<name>master1</name>
<hostname>localhost</hostname>
<port>8080</port>
<username>cluster</username>
<password>cluster</password>
<master>Y</master>
</slaveserver>
</masters>
<report_to_masters>Y</report_to_masters>
-<slaveserver>
<name>slave1-8081</name>
<hostname>localhost</hostname>
<port>8081</port>
<username>cluster</username>
<password>cluster</password>
<master>N</master>
</slaveserver>
</slave_config>

复制代码

    咱们开启的是一个slave服务器,所以看slaveserver里面配置的username 和password,对,默认的都是cluster,这里的配置值就是你登录的账号密码。现在可以登录配置的carte服务器了。

  

   进来后发现并没有任何东西,这是正常现象,因为我们还需要配置一下kettle的 job 和transformation,到这一步整个web服务器的工作就算完成了。接下来就是kettle文件的配置了。

 

四、Kettle配置

   1.打开kettle,并任意打开一个job 活着transformation ,在左部菜单选择view,菜单选项里面有个Slave Server,这里我们需要配置一下。

  

  咱们new一个 slaveserver ,响应的值:

  这里请注意,ip 和 port 必须和我们之前开启的web 服务器一致,点击ok保存之后,记得share一下记住下来。

 

  2.配置 job 或 transformation 的run options 

   打开任意一个job或transformation,配run options ,如下图:

 

  继续配置:

   

   会产生一个新的tab,这里我们的配置就完成了。

    

  再打开 http://127.0.0.1:8081看看,在job 列表里面已经出现了刚刚我们配置的job

 

   我们就可以点进去,在web 里面控制这个job,是不是很方便?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过Java程序调用Kettle的API来向JobTransformation传递参数。以下是一个示例代码: ```java import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.variables.Variables; import org.pentaho.di.repository.Repository; import org.pentaho.di.repository.RepositoryDirectoryInterface; import org.pentaho.di.repository.kdr.KettleDatabaseRepository; import org.pentaho.di.trans.Trans; import org.pentaho.di.trans.TransMeta; import org.pentaho.di.trans.TransParameterCodec; import java.util.HashMap; import java.util.Map; public class KettleJobCaller { public static void main(String[] args) throws KettleException { KettleEnvironment.init(); String repositoryName = "MyRepository"; String username = "admin"; String password = "password"; String jobName = "MyJob"; String transformationName = "MyTransformation"; String[] parameters = new String[]{"param1=value1", "param2=value2"}; Repository repository = new KettleDatabaseRepository(); repository.init(repositoryName, username, password); RepositoryDirectoryInterface directory = repository.loadRepositoryDirectoryTree().findDirectory("/my/directory"); Variables variables = new Variables(); variables.setParameters(parameters); TransMeta transMeta = repository.loadTransformation(transformationName, directory, variables, null); Trans trans = new Trans(transMeta); trans.execute(null); String[] encodedParameters = TransParameterCodec.encodeParams(parameters); Map<String, String> paramMap = new HashMap<>(); for (String encodedParameter : encodedParameters) { String[] split = encodedParameter.split("="); paramMap.put(split[0], split[1]); } JobMeta jobMeta = repository.loadJob(jobName, directory, variables, null); Job job = new Job(repository, jobMeta, variables); job.setVariables(variables); job.setParams(paramMap); job.start(); job.waitUntilFinished(); } } ``` 在上面的示例代码中,我们首先初始化Kettle的环境,然后指定仓库名称、用户名、密码、Job名称和Transformation名称。接下来,我们将要传递的参数存储在一个字符串数组中,并将它们传递给TransformationJob。在传递参数时,我们需要使用变量来存储它们。 最后,我们使用Kettle的API来加载TransformationJob,并将参数传递给它们。注意,我们需要使用TransParameterCodec来编码和解码参数。 这就是如何使用Java调用Kettle Job并传递参数的示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值