Linux Kettle 定时执行远程资源库 job

本文介绍了一种使用Kettle进行数据作业的设计方案,包括如何在不同环境中部署调试完成的作业和转换,并通过Linux定时任务实现自动化执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下仅是我根据我公司实际情况做出的配置设计,不代表所有,仅供参考。

硬件:一台Mac Pro(A),两台 Ubuntu 服务器(B和C)

角色分配:
A : 在我的Mac Pro上 使用 Kettle UI客户端 设计调试 转换 和 作业,调试完成后保存到远程资源库(在B上使用MySQL数据库来保存)
B : 建立 MySQL 数据库保存调试好的 转换 和 作业
C : 安装 Kettle (别忘记copy过来用到的各种数据库的驱动),使用命令行模式,用来自动定时执行保存在 B 中的作业和转换

注意: B 和 C 可在同一台机器上

原来我就在我自己的Mac上开发调试,等要切到生产环境的时候遇见了一个最大的问题:

在我机器上调试好的作业和转换怎么部署同步到服务器去每天定时执行?

仔细思考以后把问题分解成了三个小问题:

  • 调试好的 作业和转换 怎么同步部署到生产环境执行任务的服务器?
  • 怎么定时执行?(一般都 T+1,在每日凌晨导上一天的数据)
1. 调试好的作业和转换怎么同步部署到生产环境执行任务的服务器?

解决方案:分两步:
第一步,将作业和转换保存到数据库资源库
第二步,从资源库取作业和转换执行

第一步,将作业和转换保存到数据库资源库服务器

将 job 保存到远程资源库,不推荐文件资源库,因为windows和Linux之间文件路径不通用,可能会出现一些问题,建议数据库资源库。
Kettle如何连接数据库资源库?
在这过程中发现导入的转换和作业名字乱码都是??问号,查找原因是 Mysql 数据库字符集配置的问题。
Ubuntu 下 MySql 修改数据库编码为UTF8
一点需要注意的是:同一个作业的 .kjb 和 .ktr 文件要放在同一个目录下,不然 作业 会找不见 里边的转换

第二步,Kettle执行服务器从资源库服务器取作业和转换执行

我在kettle执行服务器中使用./kitchen.sh -listrep 命令要找出可用的资源库,发现找不见。我想来也是找不见,因为资源库在另一台服务器的MySql数据库里,我在这台执行 kettle 任务的服务器上自然找不见。既然找不见,那肯定是要配置数据库连接等配置的,配置文件在哪里呢?经过仔细搜索后,

据说是在 .kettle 文件夹下的 repositories.xml 文件里。

.kettle 在哪里?
在用户目录下,。所以:

cd ~

切换到当前用户的目录下

ls -a

找找看,有没有.kettle,.kettle 看名字就知道是隐藏文件夹,所以 需要加-a,用来显示隐藏目录,让他露出原形。
接下来,在 .kettle 文件夹下果然找见了 repositories.xml。
这里写图片描述

切换到执行 kettle 任务的服务器,到当前用户目录下 ls -a,果然也有 .kettle 文件夹,但是打开以后却是空的,没有 repositories.xml 文件,所以也就能解释的通,为什么在这台机器上使用 ./kitchen.sh -listrep 找不见可用的资源库了。
我们把在我小情人Mac Pro下找到的 repositories.xml 文件使用 scp 命令复制到这台 kettle 执行服务器的 .kettle 文件夹下。

scp 跨机远程拷贝

再次使用 ./kitchen.sh -listrep,果然能找到可用的资源库了。

执行./kitchen.sh -rep kettle_repository -user admin -pass admin -listdir,可能会遇见一下问题

ERROR: Bundle pentaho-webjars-deployer [10] Unable to get module class path. (java.lang.RuntimeException: Unable to open JAR file, probably deleted: error in opening zip file)
。。。

我把/opt/data-integration/system/karaf/caches下边的缓存数据清除掉,再执行就可以了

2. 怎么定时执行?

解决方案:在另一台服务器上安装 Kettle ,使用 linux 的定时任务来调用 Kettle 命令行执行 资源库中的 作业和转换
linux系统下调度数据库类型资源库中的kettle job

执行命令,输出log:
./kitchen.sh -rep kettle_repository -user admin -pass admin -dir /default -job test -level=debug >> /root/kettlelog/test.log

遇见的问题: ubuntu中不支持中文目录和文件名

因为有些作业和转换名字是中文的,但是在ubuntu下命令行和vim文档都是中文乱码,而且无法输入中文。解决办法如下:
ubuntu 16.04 英文版命令行安装中文语言包
安装完就可以了。

安装中文语言包
sudo apt-get install  language-pack-zh-han*

安装gnome包
sudo apt-get install   language-pack-gnome-zh-han*

安装kde包
sudo apt-get install   language-pack-kde-zh-han*
到这里就能够查看目录下面的中文字符了。

最后运行语言支持检查
sudo apt install $(check-language-support)
linux定时执行

linux系统下调度数据库类型资源库中的kettle job
Ubuntu下运行Shell脚本
crontab 定时任务
遇见的问题:

  1. 终端显示: test.sh 找不到命令
    默认系统只会在$PATH上列出的路径查找,而不会查询当前的目录有没有这样的命名,以找到的第一个为准,
    但是,如果在终端上输入: ./test.sh(这样就让系统在当前的目录下查询命名)
  2. 假如 JAVA_HOME 你已经设置过了,就不需要下边那一行了,

    export JAVA_HOME = /usr/lib/jvm/java-8-oracle

    查看是否设置过了,使用echo $JAVA_HOME命令,
### 配置Windows计划任务以定时执行Kettle Job 为了通过Windows计划任务来定时执行KettleJob文件,需要按照以下方法进行配置: #### 创建批处理脚本 (`.bat`) 首先,创建一个批处理脚本来运行KettleJob文件。该脚本通常会调用`kitchen.bat`命令并传递必要的参数[^3]。 以下是典型的批处理脚本内容: ```batch @echo off cd C:\path\to\data-integration\ kitchen.bat /file:C:\path\to\your_job_file.kjb /level:Basic /logfile:C:\path\to\logs\joblog.log exit ``` 在此脚本中: - `cd` 命令用于切换到Kettle安装目录下的`data-integration`文件夹。 - `kitchen.bat` 是用来启动Kettle Job的核心工具。 - `/file:` 参数指定要执行的Job文件路径。 - `/level:` 参数定义日志记录级别(如`Basic`表示基础级别的日志)。 - `/logfile:` 参数指定了日志文件存储的位置。 #### 使用Windows任务计划程序 接着,在Windows任务计划程序中创建一个新的任务来定期运行此批处理脚本。 ##### 步骤说明 1. **打开任务计划程序**: 在Windows开始菜单中搜索“任务计划程序”,然后打开它。 2. **创建新任务**: 右键单击左侧窗格中的“任务计划程序库”,选择“创建任务”。 3. **填写基本信息**: - 转至“常规”选项卡,输入任务名称以及描述信息。 - 如果希望任务具有更高的权限,则勾选“使用最高特权运行”复选框[^1]。 4. **设定触发条件**: - 切换到“触发器”选项卡,点击“新建”。在这里可以选择何时以及多久执行一次任务(例如每天、每周或者特定时间点)[^1]。 5. **指定操作**: - 进入“操作”选项卡,同样点击“新建”。在弹出对话框里,“操作”应设为“启动程序”;随后浏览找到之前编写的`.bat`文件作为目标程序或脚本。 6. **确认设置无误**: 完成以上各步之后仔细核对各项参数是否正确,最后按确定按钮保存整个任务。 这样就完成了利用Windows计划任务自动调度Kettle Job的过程。 ### 注意事项 确保所有涉及路径均准确有效,并且拥有足够的访问权限去读取源数据、写入输出结果及生成的日志文件。如果遇到任何错误消息,请查阅相应日志文档以便快速定位问题所在[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值