部署Kettle做ETL开发并使用Crontab制作调度系统

摘要:
由于调度系统产品因为服务器环境方面的因素,而无法部署,故使用Linux的crontab定时器来制作简易调度系统是一个比较简便的解决方案。本文旨在记录Kettle的部署及配置文件配置注意事项和如何自制简易调度系统,以便处理类似问题时方案的复用。

背景说明:
在数据量较小,且数据源和装载地都是关系型数据库时,使用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制作调度系统》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Kubernetes使用operator安装Redis集群[原创].在Quartus II中分配管脚的两种常用方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转载)Linux定时任务cron配置

(转载)http://blog.csdn.net/jbgtwang/article/details/7995801 实现linux定时任务有:cron、anacron、at等,这里主要介绍cron服务。 名词解释:    (1)cron是服务名称;    (2)crond是后台进程;    (3)crontab则是定制好的计划任务表; 软件包安装: 要使用...

可用于Hadoop下的ETL工具——Kettle

看大家分享了好多hadoop相关的一些内容,我为大家介绍一款ETL工具——Kettle。    Kettle是pentaho公司开源的一款ETL工具,跟hadoop一样,也是java实现,其目的就是做数据整合中时数据的抽取(Extract)、转换(Transformat)、加载(Load)工作。Kettle中有两种脚本文件,transformation和j...

Linux按时间分割日志

一、由来:需要做一个定时任务定期从MySQL数据库同步数据到Oracle,5m/次,同步日志写在一个文件恐有不妥,故而需要分割,一般按天,这里为了调试,按分操作。 1.任务如下:分别指定任务的脚本,任务读取文件路径,任务日志输出; #vim kettle.sh 2 /usr/etc/tools/pendaho/data-integration/kitc...

crontab命令加载和使用

crontab命令用于设置周期性被执行的指令。 在Linux系统中,Linux任务调度的工作主要分为以下两类:1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置 首先查看有无安装crontab [root@localhost...

mac下crontab定时任务使用

这篇文章的作用 BREAK TIME 本地pc配置定时任务,开机后每隔一小时执行一次,open这个页面,休息半分钟 cron创建备忘 首先创建定时任务 crontab -e 0 */1 * * * open http://www.cnblogs.com/loveCheery/p/9067665.html 表示每隔1小时执行一次 创建后如果cron表达式和执...

Ubuntu查看crontab运行日志

Ubuntu服务器/var/log下没有cron日志,这里记录一下如何ubuntu server如何查看crontab日志 crontab记录日志 修改rsyslog sudo vim /etc/rsyslog.d/50-default.conf cron.* /var/log/cron.log #将cron前面的注释符去掉 重启rsyslog sudo...