最近工作中需要在linux部署kettle做数据抽取转换的工作,在此做个记录(略过安装jdk部分)
一:部署kettle
1:创建一个目,将下载好的kettle解压后放在该文件夹下。
# mkdir /usr/kettle
将kettle对应的pdi-ce-7.1.0.0-12文件夹放到该目录下
# cd data-integration
# chmod +x *.sh
//以.sh结尾的文件必须拥有执行权限,如果没有,请赋予
2:测试安装是否成功
在kettle的data-integration目录中执行kitchen.sh文件,若出现帮助信息,证明安装成功,有警告信息可以忽略,不影响使用
# ./kitchen.sh
备注:
kitchen.sh:执行job
(可以通过 ./kitchen.sh -file=/usr/kettle/pdi-ce-7.1.0.0-12/kettle_job/testjob.kjb 直接执行对应的任务文件来查看是否成功)
pan.sh:执行转换
二:运用crontab执行kettle程序
1.建立目录存放kettle文件
# mkdir /usr/kettle/pdi-ce-7.1.0.0-12/kettle_job
// 存放作业文件
# mkdir /usr/kettle/pdi-ce-7.1.0.0-12/kettle_transition
// 存放转换
# mkdir /usr/kettle/pdi-ce-7.1.0.0-12/kettle_sh
// 存放执行脚本
# mkdir /usr/kettle/pdi-ce-7.1.0.0-12/kettle_log
// 存放执行kettle产生的日志文件
将从windows上配置好的.ktr和.kjb程序分别放在transition目录和job目录下(或linux下编写后直接保存到该目录下),注意:job中的转换对应的目录需要做相应修改
2:编写执行脚本
# cd /usr/kettle/pdi-ce-7.1.0.0-12/kettle_sh
# vi ceshi.sh
文本内容如下:
#!/bin/bash
#执行job程序
cd /usr/kettle/pdi-ce-7.1.0.0-12/data-integration
export JAVA_HOME=/usr/local/jdk1.8.0_201/
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
./kitchen.sh -file=/usr/kettle/pdi-ce-7.1.0.0-12/kettle_job/testjob.kjb >>/usr/kettle/pdi-ce-7.1.0.0-12/kettle_log/ceshi_$(date +%Y%m%d).log
注:(因为crond是个守护进程,它不归属于任何用户,虽然之前以root用户配置了java环境变量,但是crond一样找不到java命令,所以,当crond执行kettle任务时,需要动态设置java环境变量,否则会出现手动执行.sh没问题,放crontb里面执行后无效果)
保存ceshi.sh,执行赋予执行权限的命令
# chmod +x ceshi.sh
测试ceshi.sh是否可以正常执行
# sh -x ceshi.sh
3:设定crontab 定时执行任务
# crontab -e
*/1 * * * * /usr/kettle/pdi-ce-7.1.0.0-12/kettle_sh/ceshi.sh
//每分钟执行一次ceshi.sh
# systemctl restart crond
# systemctl enable crond
注意:
在linux中,如果是通过图形界面执行程序的话,点击那个绿色的三角即可。如果是命令行启动,后台执行进行进程不能中断。因此,在linux中不推荐使用kettle里面的自动执行,使用操作系统的定时执行要稳定的多。Windows下使用定时任务计划,linux下使用crontab。