主要介绍如何在Linux中部署kettle,正式配置环境,运行任务,转换以及设置定时任务;
免费开源的基于java的企业级ETL工具,功能强大简单易用,无可抗拒
ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种etl工具的使用,必不可少,这里我介绍一个我在工作中使用了3年左右的ETL工具Kettle,本着好东西不独享的想法,跟大家分享碰撞交流一下!在使用中我感觉这个工具真的很强大,支持图形化的GUI设计界面,然后可以以工作流的形式流转,在做一些简单或复杂的数据抽取、质量检测、数据清洗、数据转换、数据过滤等方面有着比较稳定的表现,其中最主要的我们通过熟练的应用它,减少了非常多的研发工作量,提高了我们的工作效率
中文官网:http://www.kettle.org.cn/
下载地址: https://sourceforge.net/projects/pentaho/files/
java -version
图中可看出jdk版本为openJDK 需要卸载;如果没有安装则跳过
rpm -qa | grep java
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
rpm -ivh jdk-8u251-linux-x64.rpm
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
java -version
unzip -o -d /home/program/kettle/ pdi-ce-8.3.0.0-371.zip
在windows中编写好任务、转换;打包资源库上传至linux;
unzip -o -d /home/program/kettle/kettle_repo xxx.zip
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根目录下\lib
如在资源库中使用了jndi连接池添加配置
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
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介绍
chmod +x start.sh
./start.sh
tail -f -n 2000 /home/logs/etl/xxxx.log
crontab例行性工作可以直接在/etc/crontab中进行配置,但是不建议这样子做,因为有可能会因为输入法的问题而导致无法运行。我们使用crontab–e来进行编辑。
下面来看下使用crontab –e进入编辑界面后的六个字段参数说明:
字段:* * * * * 命令串
释义:分 时 日 月 周 具体要执行的命令或者脚本等,具体可查看cron表达式
上面的*表示具体的时间数字,在实际应用中,要替换成有意义的数据。
0 */1 * * * bash /home/program/kettle/start.sh
上面命令的意义是:每1小时就会执行/home/program/kettle/start.sh脚本,而且该脚本的内容就是执行我们的job。这样就实现了每小时执行调度的工作了。
配置如下
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