Kettle从入门到放弃

参考内容

表输出详解

学习思路

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

常见问题:

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

一 .核心

1.变量传递**

设置变量操作只在job中有效,在transfer中无效
Kettle从入门到放弃_第1张图片
Kettle从入门到放弃_第2张图片
Kettle从入门到放弃_第3张图片

2.增量同步**

参考文章

删除了该文中的对日期后的数据的删除,因为后面同步对比的时候,会补全该时间段的操作。

思路:

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

步骤:**

1.设置全局变量,一个当天日期,一个时间间隔;
2.获取源表,目标表该时间段的数据,source_t ,target_t;
3.对比source_t ,target_t的数据 对比结果如下图;
4.对不同结果产生不同分支的操作
Kettle从入门到放弃_第4张图片

Kettle从入门到放弃_第5张图片
Kettle从入门到放弃_第6张图片

Kettle从入门到放弃_第7张图片
Kettle从入门到放弃_第8张图片

3 kettle调度

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

在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调度:
如图配置好,执行,到点自动执行
Kettle从入门到放弃_第9张图片
Kettle从入门到放弃_第10张图片
Kettle从入门到放弃_第11张图片
到点自动执行
Kettle从入门到放弃_第12张图片
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

Kettle从入门到放弃_第13张图片
注意
在spoon里面执行不报错,在kitchen里面调度没出错但是没数据。

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

Kettle从入门到放弃_第14张图片

### 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对应文件夹 执行
Kettle从入门到放弃_第15张图片
Kettle从入门到放弃_第16张图片
Kettle从入门到放弃_第17张图片

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

#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日志请点这里

Kettle从入门到放弃_第18张图片
wan.sh
在这里插入图片描述
crontab -e
Kettle从入门到放弃_第19张图片
在这里插入图片描述
这次真的完成了!最后这个linux调度我搞了一天!!!
果然还是我java 和 linux太菜了、

二. 常见问题

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

设置连接编码:characterEncoding utf8

Kettle从入门到放弃_第20张图片

2.STMP发邮件注意事项

只有job可以发邮件。transfer不可以发邮件,并且配置smtp时密码是授权码 不是账户密码

你可能感兴趣的:(数据仓库,工具)