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

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

硬件:一台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命令,

你可能感兴趣的:(数据仓库与BI)