Kettle之定时运行Job

  • Post author:
  • Post category:其他


Kettle做定时任务有两种方式。

第一种是kettle自带的Start控件,缺点是kettle程序必须始终运行,浪费内存。

第二种是使用系统的定时功能。使用Kitchen、Pan命令编写bat、sh脚本,然后使用windows任务计划或者linux的crotab实现定时执行执行脚本。


(一)Start控件执行定时任务

我们需要建立一个job,来让转换定时执行。

操作步骤

1、运行软件,进入主界面。点击左上角的

文件 → 新建 → 作业(J)

新建一个作业(job),并保存,作业的后缀名为kjb。

2、点击面板左侧的

核心对象

,选择

通用

文件夹下的

START



转换

并把它拖到右侧的编辑区中,按住

shift

画线连接“START” 和“转换”。

3、双击编辑区的“START”图标,设置定时任务。记住勾选重复选项,不勾选,任务只会执行一次。

4、双击编辑区的“转换”图标,设置要定时执行的转换。

5、点击“Run”,选择“本地执行”,点击“执行”来执行这个转换。

6、等待设置的间隔时间后,正确执行效果如图



(二)系统定时执行脚本

前面我们介绍了 Kettle的Spoon的转换和作业定时任务GUI设计方式以及运行,但是在实际应用中,我们需要计划任务是在服务器后台运行。

首先我们需要了解Kettle的Kitchen和Pan

  • Kitchen——作业(job)执行器 (命令行方式)
  • Pan——转换(trasform)执行器 (命令行方式)

下面我们将重点讲解经常会用到的 ***作业执行器 Kitchen.bat *** 。参数项使用

/rep:参数值

或者

-rep=参数值

这两种方式都可以。

Kitchen 参数说明:

-rep:Repository name 任务包所在存储名

-user:Repository username 执行人

-pass:Repository password 执行人密码

-job:The name of the job to launch 任务包名称

-dir:The directory (don”t forget the leading / or )

-file:The filename (Job XML) to launch

-level:The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing) 指定日志级别

-log:The logging file to write to 指定日志文件

-listdir:List the directories in the repository 列出指定存储中的目录结构。

-listjobs:List the jobs in the specified directory 列出指定目录下的所有任务

-listrep:List the defined repositories 列出所有的存储

-norep:Don”t log into the repository 不写日志

Windows编写Bat脚本文件


1、新建一个bat文件,命名job.bat,然后编辑,输入内容如下:

:: Kitchen.bat所在路径盘符

d:

:: Kitchen.bat所在目录? ? ?

cd D:\kettle\kettle-9.1\data-integration

:: 作业(job)文件路径和日志文件路径

:: 执行kitchen执行job,并写入日志

kitchen /file:D:\kettle\kettle-workspace\03.kjb /level:Base>>D:\kettle\test.log



注意:确保路径的正确性。



windows bat文件中注释符为::  使用notebook编辑时,记得编码改为ANSI编码,否则会乱码。

2、双击job.bat,即可运行。


3、后台运行脚本文件

我们已经建立了命令行运行的bat文件,并且已经可以正确执行我们的ETL任务了,但是现在我们在运行bat后,桌面上面会一直存在一个控制台的黑窗口,我们可以使用bat命令中的隐藏窗口的命令。

修改我们的job.bat文件

@echo off

if “%1” == “h” goto begin

mshta vbscript:createobject(“wscript.shell”).run(“%~nx0 h”,0)(window.close)&&exit

:begin


:: Kitchen.bat所在路径盘符

d:

:: Kitchen.bat所在目录? ? ?

cd D:\kettle\kettle-9.1\data-integration

:: 作业(job)文件路径和日志文件路径

:: 执行kitchen执行job,并写入日志

kitchen /file:D:\kettle\kettle-workspace\03.kjb /level:Base>>D:\kettle\test.log

在此双击job.bat运行,我们将不会再看到控制台黑窗口继续保留在桌面上,并且等待设置的间隔时间后,我们可以看到日志文件记录。

···

2017/12/07 16:51:26 – Kitchen – Logging is at level : 基本日志

2017/12/07 16:51:26 – Kitchen – Start of run.

2017/12/07 16:51:31 – job2 – 开始执行任务

2017/12/07 16:51:31 – job2 – job2

2017/12/07 16:53:31 – job2 – 开始项[简单表同步]

2017/12/07 16:53:31 – 简单表同步 – Loading transformation from XML file [file:///D:/KettleProject/TEST2.ktr]

2017/12/07 16:53:31 – 简单表同步 – Using run configuration [Pentaho local]

2017/12/07 16:53:31 – 简单表同步 – Using legacy execution engine

2017/12/07 16:53:31 – TEST2 – 为了转换解除补丁开始 [TEST2]

2017/12/07 16:53:32 – 表输入.0 – Finished reading query, closing connection.

2017/12/07 16:53:32 – 表输入.0 – 完成处理 (I=3, O=0, R=0, W=3, U=0, E=0)

2017/12/07 16:53:32 – 插入 / 更新.0 – 完成处理 (I=3, O=0, R=3, W=3, U=1, E=0)


Windows定时执行Bat脚本

(1)写好bat批处理文件后,加到计划任务中。在windows的搜索栏中,搜索“计划任务”(不同版本不太一样),如图

ETL工具kettle怎么做定时任务

(2)点击程序菜单项的操作,选择创建任务

ETL工具kettle怎么做定时任务

(3)输入任务的名字,其他的用默认就好,然后点击操作选项卡

ETL工具kettle怎么做定时任务

(4)点击新建,然后选择你创建的bat文件;最后点击确定,然后点 触发器选项卡;所谓的触发器就是你的定时器

ETL工具kettle怎么做定时任务

(5)上面的开始任务下拉框可以进行选择,一般我们选择按预定计划;接下来选择频率,如每天,每月,每周;这个和用kettle自带功能一样,不再叙述;


Linux执行定时任务

linux脚本文件调用kitchen 和 pan去执行job和transformation文件,然后使用crontab定时执行sh脚本。

如果遇到无法链接存储库:解决方法将repository.xml放到与pan.sh等sh的同目录下。

1.创建目录

  • 在opt下创建存放sh文件的目录kettleShs
  • 在opt下创建存放log文件的目录kettleLogs

2.创建定时执行sh文件

直接上例子,以执行转换为例

#!/bin/bash

export JAVA_HOME=/opt/jdk1.8.0_191

export JRE_HOME=/opt/jdk1.8.0_191/bin

export PATH=$PATH:$JAVA_HOME/bin

currTime=$(date “+%Y-%m-%d-%H-%M-%S”)

jobName=”o2dh-”

logName=$jobName${currTime}.log

/opt/pdi-ce-7.1.0.0-12/data-integration/pan.sh  -rep=localOrg -user=wst -pass=wst -dir=/99RS/O2DH -trans=3 -level=Detailed -logfile=/opt/kettleLogs/$logName


上面的环境变量必须要加,不然不能调起转换和作业。

  • currTime是秒单位的系统时间和一个字符串拼接成的日志名称
  • 最后一行是调用转换的命令行,具体参数通过帮助就可以了解到。

3.编辑定时计划

如果是用户级别的定时计划就编辑vim /etc/crontab,记得在时间参数和命令行中间加上用户

系统级别的定时计划命令是 crontab -e,添加定时任务

05 22 * * * /opt/kettleShs/o2dh.sh>/opt/kettleLogs/o2dh.log

我这里的意思是每天22点03分执行o2dh.sh,并写一个日志。

crontab知识补充:

crontab的命令构成为 时间+动作,其时间有

分、时、日、月、周

五种,操作符有


  • *

    取值范围内的所有数字

  • /

    每过多少个数字



  • 从X到Z



  • 散列数字

例如:

每小时的第3和第15分钟执行  3,15 * * * * myCommand

4. 重启crontab服务

#centos

service crond restart

#ubuntu

service cron restart

OK ,等待计划执行。


参看文章

程序员应该借助互联网实现知识的开放、分享。让编码没有困难,形成一个开放的知识圈。为此,谢谢大家的共享。


  1. Kettle入门之三 Kettle定时任务(GUI)

  2. Kettle入门之四 Kettle定时任务(后台任务)


  3. Linux Crontab 定时任务


  4. 在linux下设置kettle的定时任务方法



版权声明:本文为qq_22310551原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。