最近完成了公司安排的kettle项目,从零学起到解决各种问题,已经基本使用相对熟练了,做些总结,以便学习。
kettle项目总结
- kettle安装
- Windows
- mac
- kettle使用
- kettle部署
- Linux
- Windows
kettle安装
这里安装只指安装在mac和Windows上,当然,mac和linux是相通的,问题不大。
Windows
- 下载地址https://sourceforge.net/projects/pentaho/files/Data%20Integration/
选择绿色按钮,下载最新版,可能会很慢,挂个VPN,或者找找有没有网盘资源 - 下载完后正常安装,当然,kettle是基于Java写的,所以在正式使用kettle之前务必下载并配置好Java,建议Java1.8,这里就不再赘述了
- 网上搜索mysql连接器(假设推送库和目标库都是mysql),下载对应版本,然后放到kettle的lib文件夹下
- 将你Java文件夹下的tools.jar放在kettle的lib文件夹下(这一步非必须)
- 如果出现一个new GC的报错,那么在libswt文件夹下,找到对应版本文件夹,从网上下载最新swt.jar包,然后替换即可
mac
- kettle因为基于Java编写,所以Windows和Mac及Linux都是一个版本,上面的下载地址及文件都可以直接使用
- 配置同Windows
- 这里Mac需注意一点,如果进入了kettle,双击DB连接,连接数据库报错,报错可能会提示你Java版本不对,但只要是1.8就绝对没问题,这时候尝试右键,然后新建数据库连接,应该就可以连接上了,这就是Mac兼容性带来的问题
- Mac兼容性还有一个问题,如果你开启了深色模式,然后进入页面可能会界面文字全都是白色,非常影响使用,很恶心人
kettle使用
kettle使用此处已Windows为准,因为kettle是界面图形开发,哪怕你是Linux,想开发也得打开图形界面
这里如何使用更多推荐几篇非常好的博客,他们已经总结的非常好了,可以学习学习
- 这里推荐两个博客,第一个介绍的非常基础,第二个是增量推送,根据时间戳进行推送,大家可以看看
https://www.jianshu.com/p/9fc6f0f041d2 - 这里根据我的项目提几个kettle功能模块的使用吧
- 可以通过一个转换,先写个sql,再设置变量的方式,动态设置表名称等
- Java代码模块,可以实现动态拼接等功能,推荐篇博客
- 在转换中,可以通过‘获取系统信息’功能模块,获取系统时间等信息
- 可以将查询要推送的数据排序,再通过去重的功能模块,去除重复数据,可以再多了解扩展一下
- 时间戳在很多时候设置为time_stamp,但TIMESTAMP值支持的范围1970-01-01 08:00:01 到2038-01-19 11:14:07,如果超过了会报错
- 如果将多个作业合并,那么“开始”到下一步的连线,要用带锁的那个,绿色正确执行步骤的那个,只会执行第一个作业,其他就会漏掉
kettle部署
这里部署服务器分为Linux和Windows,建议大家最好可以部署在Windows服务器上,原因见后文
Linux
先说说Linux服务器
- kettle文件打压缩包,上传到Linux服务器指定位置,如:“/opt/data-integration”
- 建好的kettle模型打包,上传至指定位置,作业文件位置如:“/opt/data-integration/kettle-kcdb/alarm/work.kjb”
- 在目录“/opt/data-integration”下创建“logs”文件夹,存放日志文件
- 本地写好sh脚本,提前准备好服务器java路径,格式如下
cd /opt/data-integration
export JAVA_HOME=/usr/local/tools/java/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
./kitchen.sh -file=/opt/data-integration/kettle-kcdb/alarm/work.kjb >>/opt/data-integration/logs/zltb_$(date +%Y%m%d).log
- 解压kettle文件,配置kettle环境。确认文件位置对应
- 测试要执行的脚本文件, chmod a+x *.sh,给test.sh添加文件的执行权限,等待执行过程,结束后查看数据库,文件插入成功,脚本正确
- sh文件在Windows上编辑完成后,上传至Linux服务器上可能会有格式问题,如:Windows回车后后缀为“\d\r”,而Linux不能识别“\r”
使用指令
执行清除格式命令:sed -i ‘s/\r$//’ *.sh - 在终端上,键入“crontab -e”,进入定时任务文件,格式如下:
*/5 * * * * /usr/local/tools/kettle-sh/status.sh
这个任务命令指每五分钟运行一次,星号分别代表分时日月周 - 查看crontab服务状态
service crond status - 进入服务目录, 重启服务
systemctl restart crond.service
或执行
service crond restart
注:这里可以把restart改成start、stop等,功能不必言表 - 这里可以使用ps -ef | grep kettle,查看运行kettle进程;使用free -h查看内存占用;使用top查看CPU占用;tail -f /var/log/cron,查看定时任务运行日志。这些对于kettle优化有着很重要的意义
这里再讲讲kettle性能优化及相关的一些问题:
- CPU优化问题。定时任务启动的kettle项目,会每次重开一个kettle应用,在启动的时候CPU占用高达55%左右,虽然在运行期间占用CPU只有1.5%左右,并且任务完成后自动杀死所有启动的进程,但问题来了,这还只是启动一个,如果多个同时启动,那恭喜你了。这个问题目前我没找到很好的解决方法,只能尽量合并kettle作业,然后错开启动时间,如果小伙伴找到比较好的解决方案,可以告知一下
- 内存优化问题。kettle在启动后,假设两小时推送一次,他会启动kettle应用,然后一直挂着等待两小时后再执行,执行完成后再杀死进程。如果这时候还未来得及杀死进程,又启动新的,就会导致内存占用不断增加,最后服务器崩溃,所以这块加个锁,让他没有结束,就算定时任务调脚本,也依然失败,直到久的结束后,下次调用脚本才会启动。可以看看这个博客最后部分,介绍的很详细
- 还有就是修改kettle自身占用的大小了,毕竟Java编写,我们更改他的jvm呗。修改文件目录下的spoon.sh启动脚本,网上很多相关内容,这里不再赘述
Windows
Windows就没有Linux那么多事
- 首先,kettle文件打压缩包,上传到服务器指定位置
- 像安装到Windows那样,该配置的先配置好
- 启动kettle,将所有作业放到一个kettle应用里执行,设定好时间,解决
- 因为上面说过了,启动的时候占用内存较大,会加载各种配置文件及依赖等,但Windows不用定时任务启动呀,所以不必过多担心内存等,当然,能优化还是最好优化
以上就是总结的全部内容了,后续也许会再补充