Kettle8在Linux Centos7部署并定时任务调度

Kettle8在Linux Centos7部署并定时任务调度

  • Kettle8在Linux Centos7部署并定时任务调度
    • kettle介绍
    • 配置环境
      • 安装JAVA
      • 安装Kettle
    • 上传本地资源库
    • 修改Kettle配置
      • Kettle调优
      • 上传JDBC驱动包
      • 添加jndi连接池配置
    • 编写执行脚本
    • 设置linx定时任务调度
    • Kettle使用kettle.properties

Kettle8在Linux Centos7部署并定时任务调度

主要介绍如何在Linux中部署kettle,正式配置环境,运行任务,转换以及设置定时任务;

kettle介绍

  1. 免费开源的基于java的企业级ETL工具,功能强大简单易用,无可抗拒

    ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种etl工具的使用,必不可少,这里我介绍一个我在工作中使用了3年左右的ETL工具Kettle,本着好东西不独享的想法,跟大家分享碰撞交流一下!在使用中我感觉这个工具真的很强大,支持图形化的GUI设计界面,然后可以以工作流的形式流转,在做一些简单或复杂的数据抽取、质量检测、数据清洗、数据转换、数据过滤等方面有着比较稳定的表现,其中最主要的我们通过熟练的应用它,减少了非常多的研发工作量,提高了我们的工作效率

  2. 中文官网:http://www.kettle.org.cn/

  3. 下载地址: https://sourceforge.net/projects/pentaho/files/

配置环境

安装JAVA

  • 离线安装java
  1. 下载对应的JDK版本
    Kettle8在Linux Centos7部署并定时任务调度_第1张图片
  2. 查看原系统jdk版本
java -version

在这里插入图片描述
图中可看出jdk版本为openJDK 需要卸载;如果没有安装则跳过

  1. 查看安装的信息
rpm -qa | grep java

Kettle8在Linux Centos7部署并定时任务调度_第2张图片

  1. 卸载OpenJDK
rpm -e --nodeps tzdata-java-2019c-1.el7.noarch
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.232.b09-0.el7_7.x86_64
  1. 安装jdk
rpm -ivh jdk-8u251-linux-x64.rpm

Kettle8在Linux Centos7部署并定时任务调度_第3张图片

  1. 设置变量环境

vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_251

export JAVA_BIN=/usr/java/jdk1.8.0_251/bin

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME JAVA_BIN PATH CLASSPATH

环境变量生效,需要执行命令

source /etc/profile
  1. 验证JDK是否安装成功
java -version

安装Kettle

  1. 将下载后的kettle工具pdi-ce-8.3.0.0-371.zip上传至linux服务器,kettle在windows和linux系统中通用;
    windows使用Kitchen.bat,linux使用kitchen.sh;
  2. 解压文件
 unzip -o -d /home/program/kettle/  pdi-ce-8.3.0.0-371.zip
  • 安装完成

上传本地资源库

在windows中编写好任务、转换;打包资源库上传至linux;

  • 上传压缩文件到linux服务器 Kettle8在Linux Centos7部署并定时任务调度_第4张图片
  • 解压文件
unzip -o -d /home/program/kettle/kettle_repo  xxx.zip
  • 创建kettle资源库文件,在根目录下
 vi repositories.xml

添加此内容,改为自己实际的内容

<?xml version="1.0" encoding="UTF-8"?>
<repositories>
        <repository>
                <id>KettleFileRepository</id>
                <name>资源库名称</name>
                <description>File repository</description>
                <is_default>false</is_default>
                <base_directory>资源库地址</base_directory>
                <read_only>N</read_only>
                <hides_hidden_files>N</hides_hidden_files>
        </repository>
</repositories>

参数:
name:资源库名称 xxx
base_directory:资源库地址 /home/program/kettle/kettle_repo/xxx

修改Kettle配置

Kettle调优

  1. 调整JVM大小进行性能优化,修改Kettle定时任务中的Kitchen或Pan或Spoon脚本。
  2. linux下修改spoon.sh文件
    Kettle8在Linux Centos7部署并定时任务调度_第5张图片
    参数参考:
    -Xmx1024m: 设置JVM最大可用内存为1024M。
    -Xms512m: 设置JVM促使内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
    -Xmn2g: 设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
    -Xss128k: 设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
    -XX:MaxPermSize JVM最大允许分配的非堆内存,按需分配

上传JDBC驱动包

上传驱动包至kettle根目录下\lib

  1. oracle:ojdbc14-10.2.0.4.0.jar
  2. mysql: mysql-connector-java-5.1.47.jar

添加jndi连接池配置

如在资源库中使用了jndi连接池添加配置

  1. kettle jndi的使用
    Kettle8在Linux Centos7部署并定时任务调度_第6张图片

  2. kettle连接池配置

vi simple-jndi/jdbc.properties

文件最下方添加配置

#mysql配置
demo/type=javax.sql.DataSource
demo/driver=com.mysql.cj.jdbc.Driver
demo/url=jdbc:mysql://127.0.0.1:3366/demo?characterEncoding=utf8&serverTimezone=Asia/Shanghai
demo/user=root
demo/password=root

#oracle_local
oracle/type=javax.sql.DataSource
oracle/driver=oracle.jdbc.driver.OracleDriver
oracle/url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
oracle/user=oracle
oracle/password=oracle

##sqlserver_local
sqlserver/type=javax.sql.DataSource
sqlserver/driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
sqlserver/url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=sqlserver
sqlserver/user=sqlserver
sqlserver/password=sqlserver

编写执行脚本

  1. 进入/home/program/kettle 目录下创建执行脚本
vi start.sh
export JAVA_HOME=/home/program/jdk8
export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

REP_NAME=资源库名称
JOB_NAME=执行任务名称
LOG_DATE="`date +%Y-%m-%d`"
LOG_PATH=/home/logs/etl/$JOB_NAME"_"$LOG_DATE"_log.log"
DIR_PATH=/
FILE=/home/program/kettle/kettle_repo/xxxx/$JOB_NAME".kjb"
LOG_LEVEL=Basic
echo ==================================================================================================
echo    开始数据转换:
echo            资源库:$REP_NAME
echo            任务名称:$JOB_NAME
echo            日志路径:$LOG_PATH
echo ==================================================================================================

/home/program/kettle/data-integration/kitchen.sh -rep:$REP_NAME -dir:$DIR_PATH -file:$FILE -job:$JOB_NAME -level:$LOG_LEVEL>>$LOG_PATH

kitchen.sh 参数介绍:

-rep: 运行资源库名称
-dir: kettle资源库中存放任务转换的根目录
-file: 运行的任务文件
-job:执行任务名称
-level:log级别 (Basic, Detailed, Debug, Rowlevel, Error, Nothing);如需提高性能则Basic即可
更多参数介绍详看:kettle介绍

  1. 设置脚本为可执行
chmod +x start.sh
  1. 执行脚本
./start.sh
  1. 查看执行日志
tail -f -n 2000 /home/logs/etl/xxxx.log

设置linx定时任务调度

  1. 配置crontab例行性工作排程

crontab例行性工作可以直接在/etc/crontab中进行配置,但是不建议这样子做,因为有可能会因为输入法的问题而导致无法运行。我们使用crontab–e来进行编辑。

下面来看下使用crontab –e进入编辑界面后的六个字段参数说明:
字段:* * * * * 命令串
释义:分 时 日 月 周 具体要执行的命令或者脚本等,具体可查看cron表达式
上面的*表示具体的时间数字,在实际应用中,要替换成有意义的数据。

  1. 输入crontab –e进入编辑界面,在编辑界面进行计划任务的设置
0  */1  *  *  * bash /home/program/kettle/start.sh

上面命令的意义是:每1小时就会执行/home/program/kettle/start.sh脚本,而且该脚本的内容就是执行我们的job。这样就实现了每小时执行调度的工作了。

Kettle使用kettle.properties

Kettle8在Linux Centos7部署并定时任务调度_第7张图片

配置如下
commit_size = 5000
#邮箱授权码
email_send_auth = EABSHTFXLMEYNCYH
#邮箱发送地址
email_send_url = smtp.163.com
#邮箱发送人
email_send_user [email protected]
#发送用户,多个空格隔开
email_user = [email protected]
thread_size = 27

你可能感兴趣的:(etl,kettle,Java,etl,java,数据仓库,linux)