背景说明:

在数据量较小,且数据源和装载地都是关系型数据库时,使用Kettle做ETL较为简便。

由于调度系统产品因为服务器环境方面的因素,而无法部署,故使用Linux的crontab定时器来制作简易调度系统是一个比较简便的解决方案。

本文旨在记录Kettle的部署及配置文件配置注意事项和如何自制简易调度系统,以便处理类似问题时方案的复用。

一、环境与工具

  • CentOS 6.7
  • JDK1.8/JDK1.7
  • pdi-ce-6.1.0.1-196.zip

二、Linux安装Kettle

2.1 安装JDK并配置环境变量

Kettle的运行需要jdk环境,所以需要先安装jdk。jdk的安装方法此处略去。

2.2 创建kettle用户

# useradd -m kettle

2.3 上传Kettle安装包并解压

创建kettle部署目录

# mkdir /opt/kettle

将安装包pdi-ce-6.1.0.1-196.zip上传至/opt/kettle目录下,并解压:

# unzip /opt/kettle/pdi-ce-6.1.0.1-196.zip

2.4 更改属主属组和执行权限

# chown -R kettle:kettle /opt/kettle
# chmod 755 /opt/kettle/pdi-ce-6.1.0.1-196/data-integration/*.sh

2.5 测试

切换至kettle用户

# su kettle

启动kettle的kitchen或pan

$ cd /opt/kettle/pdi-ce-6.1.0.1-196/data-integration/
$ ./kitchen.sh

如果能正常启动,则说明kettle安装成功。

2.6 配置文件设置

在/home/kettle/.kettle目录下有一个kettle.properties文件,在kettle程序启动时会读取这个文件配置的属性。这里一般可以将数据库的连接信息(包含ip,端口,数据库实例,用户名,密码等)以及自定的一些变量(如etl_path等)。

将这些连接信息配置在配置文件中,而在kettle脚本中使用这些变量名来代替,好处在与脚本的移植与复用时,不需要改动脚本,只需要修改配置文件即可。

三、简易调度系统制作

3.1 创建调度系统目录

  • 创建kettle脚本存放目录
# mkdir -p /opt/kettle/scripts
# mkdir -p /opt/kettle/scripts/jobs
# mkdir -p /opt/kettle/scripts/trans
  • 创建调度脚本存放目录
# mkdir -p /opt/kettle/scheduler
  • 创建日志存放目录
# mkdir -p /opt/kettle/logs

3.2 上传或创建调度脚本kettle_scheduler.sh

上传kettle_scheduler.sh文件到/opt/kettle/scheduler目录下。或者进入目录创建:

编辑文件:

# cd /opt/kettle/scheduler
# vim kettle_scheduler.sh

输入如下内容并保存:

#!/bin/bash
#
cd /opt/kettle/scripts/jobs/
date=`date +%Y%m%d`
files=`ls /opt/kettle/scripts/jobs/*.kjb`
for file in $files
do
file_name=`echo "$file" | awk -F '.' '{print $1}' | awk -F '/' '{print $6}'`
log_name="${file_name}-${date}.log"
mkdir -p /opt/kettle/logs/$file_name
/opt/kettle/pdi-ce-6.1.0.1-196/data-integration/kitchen.sh -file=$file -level=basic>>/opt/kettle/logs/$file_name/$log_name
done

3.3 修改权限

# chown -R kettle:kettle /opt/kettle
# chmod 755 /opt/kettle/scheduler/kettle_scheduler.sh

3.4 配置定时任务

进入crontab编辑界面

# crontab -e

输入如下内容,保存退出

1  0  *  *  *  chown -R kettle:kettle /opt/kettle/scripts
5  0  *  *  *  su - kettle -c "/opt/kettle/scheduler/kettle_scheduler.sh" &

四、调度系统的使用

4.1 kettle脚本的上线

上传开发好的kettle脚本到指定路径。

  • 将所有的kettle作业(以.kjb为后缀)上传至/opt/kettle/scripts/jobs目录下;
  • 将所有的kettle转换(以.ktr为后缀)上传至/opt/kettle/scripts/trans目录下。

这里开发kettle作业时,需要注意作业和转换的目录位置关系,比如可以在配置文件kettle.properties中配置etl_path=/opt/kettle/scripts。

4.2 日志查看

在/opt/kettle/logs目录下,每一个作业会新建一个对应名称的文件夹用于存储执行的日志,作业的每一次执行都会在这个文件夹下创建一个日志文件并加上日期。

例如,/opt/kettle/scripts/jobs目录下有个test.kjb的作业,则执行完后会在/opt/kettle/logs/test目录下创建一个test-20190823.log

# cd /opt/kettle/logs/test
# cat test-20190823.log

五、日志的清理

5.1 上传或创建日志清理脚本kettle_clean.sh

上传kettle_clean.sh文件到/opt/kettle/scheduler目录下。或者进入目录创建:

编辑文件:

# cd /opt/kettle/scheduler
# vim kettle_clean.sh

输入如下内容并保存:

#!/bin/bash
dir=/opt/kettle/logs
cd ${dir}
reserveDays=7 # 设置要保留的日志天数
sub_dirs=`ls ${dir}`
for sub_dir in ${sub_dirs}; do
count=$(ls ${sub_dir} | wc -l)
if [[ ${count} -gt ${reserveDays} ]]; then
cleanCnt=$((count-reserveDays))
files=$(ls ${dir}/${sub_dir} | head -n ${cleanCnt})
cd ${sub_dir}
rm -rf ${files}
cd ..
fi
done

5.2 更改属主属组和执行权限

# chown kettle:kettle /opt/kettle/scheduler/kettle_clean.sh
# chmod 755 /opt/kettle/scheduler/kettle_clean.sh

5.3 配置定时任务

进入crontab编辑界面

# crontab -e

增加一行如下内容,保存退出

0  2  *  *  *  su - kettle -c "/opt/kettle/scheduler/kettle_clean.sh"

部署Kettle做ETL开发并使用Crontab制作调度系统的更多相关文章

  1. 开源作业调度工具实现开源的Datax、Sqoop、Kettle等ETL工具的作业批量自动化调度

    1.阿里开源软件:DataX DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳 ...

  2. kettle系列-4.kettle定制化开发工具类

    要说的话这个工具类还是比较简单的,每个方法体都比较小,但用起来还是可以的,把开发中一些常用的步骤封装了下,不用去kettle源码中找相关操作的具体实现了. 算了废话不多了,直接上重点,代码如下: im ...

  3. 【转载】在 2016 年做 PHP 开发是一种什么样的体验?(一)

    转自:https://www.v2ex.com/t/312651 在 2016 年做 PHP 开发是一种什么样的体验?(一) 嘿,我最近接到一个网站开发的项目,不过老实说,我这两年没怎么接触编程,听说 ...

  4. 从大公司做.NET 开发跳槽后来到小公司的做.NET移动端微信开发的个人感慨

    从14年11月的实习到正式的工作的工作我在上一家公司工作一年多了.然而到16年5月20跳槽后自己已经好久都没有在写博客了,在加上回学校毕业答辩3天以及拿档案中途耽搁了几天的时间,跳槽后虽然每天都在不停 ...

  5. 【转】在 2016 年做 PHP 开发是一种什么样的体验?(一)

    原文: https://www.v2ex.com/t/312651 在 2016 年做 PHP 开发是一种什么样的体验?(一) 嘿,我最近接到一个网站开发的项目,不过老实说,我这两年没怎么接触编程,听 ...

  6. ETL开发面试问题加吐槽加职业发展建议

    写在前面: 作为甲方,对于乙方派来的开发人员,我是会自己面一下.总体来说遇到的水平不一,于是经过这三年多的面(cui)试(can),总结了一套自己的面试套路,中间也遇到过很多想吐槽的东西,于是大概记录 ...

  7. 【转】Java做服务器开发语言

    版权声明:本文为博主原创文章,未经博主允许不得转载. 随着游戏市场的兴起,特别是网页游戏.手机游戏的崛起,对游戏开发技术的需求越来越多.网络游戏开发是一个庞大的体系,总体来说是客户端与服务器端.客户端 ...

  8. Windows 平台做 Python 开发的最佳组合

    在 Windows 上怎样做 Python 开发?是像大神那样使用纯文本编辑器,还是用更加完善的 IDE?到底是用自带的命令行工具,还是需要装新的 Terminal?本文将带你了解如何利用微软官方维护 ...

  9. Ubuntu部署python3.5的开发和运行环境

    Ubuntu部署python3.5的开发和运行环境 1 概述 由于最近项目全部由python2.x转向 python3.x(使用目前最新的 python3.5.1) ,之前的云主机的的默认python ...

随机推荐

  1. 02、HTML 基础

    1.HTML 标题 HTML 标题(Heading)是通过<h1> - <h6> 标签来定义的. <!DOCTYPE html> <html> < ...

  2. springboot - 登录+静态资源访问+国际化

    1.项目目录结构 2.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmln ...

  3. CSRF_TOKEN

    目的是防御CSRF攻击. Token就是令牌,最大的特点就是随机性,不可预测. CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中, ...

  4. 一个完整的产品设计流程——家庭安全管家

    不管是产品设计,还是前后端开发,始终都应该做出来才能够有很好的提高锻炼.书看得再多,如果不配合实际练习始终得不到实质性的进展. 接下来的案例是和几位学弟学妹一起做的,契机是参加一个用户体验设计比赛,从 ...

  5. 应用性能测试神器 Gatling,你用过吗?

    在应用程序上线之前,有多少人做过性能测试? 估计大部分开发者更多地关注功能测试,并且会提供一些单元测试和集成测试的用例.然而,有时候性能漏洞导致的影响比未发现的业务漏洞更严重,因为性能漏洞影响的是整个 ...

  6. C#async/await心得

    结论: 异步方法的方法签名要加 async,否则就算返回 Task 也是普通方法. 调用异步方法,可以加 await 或不加 await,两者方式都是马上返回,不加 await 得到的是 Task 对 ...

  7. Python基础总结之第十天开始【认识一下python的另一个数据对象-----字典】(新手可相互督促)

    看了大家的评论,还是有意外的收货.感谢每个小伙伴的评论与补充. 众人拾柴火焰高~ 今天的笔记是记录python中的数据对象----字典! 前面有讲到list列表和tuple元组的笔记,他们都是一样可以 ...

  8. Windows下安装python2与python3以及分别对应的virtualenv

    第三次装python2与python3 除此之外还学会了如何在命令行复制代码1.单击右键2.菜单中选择标记3.按住左键选中需要复制的内容4.松开左键5.单击右键 全局中python版本为python2 ...

  9. 技巧:结合Zabbix与SNMP监控嵌入式设备

    在如何利用Zabbix监控网络设备三篇文章的前两篇中,我们介绍了如何通过Zabbix代理监控网络设备.但有些设备无法安装Zabbix代理,需要采用其他方法监控.需要考虑无法安装软件的嵌入式设备或应用程 ...

  10. WPF:window设置单一开启

    方法一: Window window = new Window();window.ShowDialog; 方法二: 设置一个判断窗口打开状态的全局控制变量         private bool i ...