Kettle从入门到放弃

参考内容html

表输出详解java

学习思路linux

  1. 核心用来作数据同步,数据处理不是核心;
  2. 能代码解决的问题,决不用部件 ;
  3. 数据处理用代码更容易;

常见问题:web

  1. 有些功能在transfer里面执行会报错,须要放到job里面,如设置变量,smtp

一 .核心

1.变量传递**

设置变量操做只在job中有效,在transfer中无效
先在transfer里面设置变量,可是不能在transfer执行,须要在job里执行
当天日期得到转化
在job里面能够执行成功shell

2.增量同步**

参考文章vim

删除了该文中的对日期后的数据的删除,由于后面同步对比的时候,会补全该时间段的操做。windows

思路:

设置增量时间区间,对该时间内的数据作增量(包含该区域的deleted,inserted,updated作同步)缓存

步骤:**

1.设置全局变量,一个当天日期,一个时间间隔;
2.获取源表,目标表该时间段的数据,source_t ,target_t;
3.对比source_t ,target_t的数据 对比结果以下图;
4.对不一样结果产生不一样分支的操做
在这里插入图片描述bash

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3 kettle调度

kettle 中kitchen和pan的使用
kettle中有四个主要的部件分别是做业、转换、步骤、跳。其中做业和转换可以相互调用执行。每个转换中的一个执行单元叫作步骤,链接步骤之间的线叫作跳。oracle

在linux中咱们一般使用kitchen和pan执行做业和转换。kitchen用来执行做业,pan用来执行转换。具体语法以下:
./kitchen.sh /file:/data/jobname.kjb /level:Detailed >>/data/log.log

./pan.sh /file:/data/transformation.ktr /level:Detailed >> /data/t_log.log

3.1windows调度:

1.spoon调度:
如图配置好,执行,到点自动执行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到点自动执行
在这里插入图片描述
2. 计划任务调度

d:
cd D:\Kettle\pdi-ce-8.2.0.0-342\data-integration
kitchen.bat /norep -file=C:\Users\Lenovo\Desktop\Kettle_test\cmd\test.kjb >>C:\Users\Lenovo\Desktop\Kettle_test\cmd\test.log 
exit

在这里插入图片描述
注意
在spoon里面执行不报错,在kitchen里面调度没出错可是没数据。

个人理解是下面的流程依赖上面的变量,两段应该都会执行,可是下面执行的时候没有获取到上面的变量数据。应该将其放在一条流程线上,这样更严谨

在这里插入图片描述

### 3.2linux配置及调度:

l
#######################linux 配置 kettle
这个过程也出了许多错,也是由于没有java基础吧,报错了也一时半会很差解决;好在本身都解决了。

###第一部分 配置java环境

#1.1 彻底卸载已有java环境 并安装1.8java
   sudo apt install openjdk-8-jdk 
   #彻底卸载java
   apt-get update
   apt-cache search java | awk '{print($1)}' | grep -E -e '^(ia32-)?(sun|oracle)-java' -e '^openjdk-' -e '^icedtea' -e '^(default|gcj)-j(re|dk)' -e '^gcj-(.*)-j(re|dk)' -e 'java-common' | xargs sudo apt-get -y remove
   apt-get -y autoremove
   
#清除配置信息:  
dpkg -l | grep ^rc | awk '{print($2)}' | xargs sudo apt-get -y purge

#清除java配置及缓存:  
bash -c 'ls -d /home/*/.java' | xargs sudo rm -rf

#手动清除JVMs:  
rm -rf /usr/lib/jvm/*
#安装java
sudo apt install openjdk-8-jdk 

##1.2找到java安装目录 并配置java环境
#whereis java
#ls -l file #看看是否是软链接
#/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

##1.3 配置java环境
#配置文件
vim  /etc/profile
#whereis java
#ls -l file #看看是否是软链接
#/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java


export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre #为jdk的安装目录

export PATH=$JAVA_HOME/bin:$PATH

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

###第二步 开发kjb kjr文件 for linux

#思路:用到路径变量解决linux 和 windows path不同的状况,先在windows上开发,而后load到linux对应文件夹 执行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

###第三步 执行
手动执行

#cd 到kitche目录
chmod +x *.sh
#手动执行
../data-integration/kitchen.sh -norep -file=./linux_test.kjb

#sh脚本执行;切记文件必须为ansic 编码;基础不牢 错误不断 哎!

#/usr/bin/bash
exe_time=`date +'%Y-%m-%d%H%M%S'`
cd /usr/local/kettle/jb_tr
../data-integration/kitchen.sh -norep -file=./linux_test.kjb -log=../kettle_log/${exe_time}kettle.log

crontab -e    
*/3 * * * * /bin/sh /usr/local/kettle/jb_tr/exe_linux_test.sh

完美!由于没有java的基础 ,linux 也不熟悉,犯了不少错误,最终都解决了。
没问题才怪! 头发都少了几根
上面这个sh脚本不能执行,这个crontab 尼玛坑了;
注意事项:我用的Ubuntu 16

① crontab的环境变量与shell里面的环境变量 独立(vi  /var/log/cron.log)坑的一比;   
 vi  /var/log/cron.log #查看cron 运行日志,只能看到一个记录  
 vim /etc/crontab  #设置好环境变

②crontab source , cd 没法使用(这些命令是shell的,不是系统的不信你where is)
③回车都会报错,fuck !

若是看不到cron日志请点这里

在这里插入图片描述
wan.sh
在这里插入图片描述
crontab -e
在这里插入图片描述
在这里插入图片描述
此次真的完成了!最后这个linux调度我搞了一天!!!
果真仍是我java 和 linux太菜了、

二. 常见问题

1.这里提示一下出现表输出的中文乱码问题的解决方案:

设置链接编码:characterEncoding utf8

在这里插入图片描述

2.STMP发邮件注意事项

只有job能够发邮件。transfer不能够发邮件,而且配置smtp时密码是受权码 不是帐户密码