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


    背景说明:
    在数据量较小,且数据源和装载地都是关系型数据库时,使用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"
    
    作者:Huidoo_Yang
    本文版权归作者Huidoo_Yang和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    关于Monitor和lock的锁操作 笔记
    模型/数据验证(System.ComponentModel.DataAnnotations)笔记
    NSIS 打包操作
    关于IE和非IE浏览器的一些差异笔记
    Wpf 字典触发器
    关于MongoDB在C#的使用
    Apache JMeter
    关于在移动端方面的css应用
    关于csc.exe
    增量运算符+=和*=的原理与不可变序列增量运算效率低的原因
  • 原文地址:https://www.cnblogs.com/yangp/p/11410137.html
Copyright © 2020-2023  润新知