Kettle的使用分享

一、下载与安装

下载地址:https://sourceforge.net/projects/pentaho/files/Data%20Integration/

将下载的zip文件解压到任意路径(最好是英文不带空格的路径,以免引起乱码等未知问题)
文件结构:(不包括打马赛克的文件夹)

lib目录:存放jar包,包括jdbc驱动包。
pwd目录:Kettle集群配置文件。
samples:自带的示例。
simple-jndi:JNDI连接的配置。
Carte.bat / Carte.sh 启动集群命令。
Encr.bat / Encr.sh Kettle提供的加密算法。
Kitchen.bat / Kitchen.sh 运行Job的命令。
Pan.bat / Pan.sh 运行转换的命令。
set-pentaho-env.bat / set-pentaho-env.sh 设置环境变量脚本。
Spoon.bat / Spoon.sh 启动KettleUI界面。
SpoonDebug.bat / SpoonDebug.sh 以debug方式启动Kettle。
安装JDK,设置JAVA_HOME变量并加入环境变量。
Windows 下双击Spoon.bat启动Kettle(Linux下执行sh spoon.sh)

二、启动

kettle在启动时候,会加载环境变量,jar包等初始化信息,并会生成一个.kettle
windows下默认是在C:\Users\用户名.kettle
Linux默认路径是~/.kettle
设置KETTLE_HOME=F:\data-integration-7.0 可改变此文件生成的路径
Windows:%KETTLE_HOME%.kettle。比如:F:\data-integration-7.0.kettle
Linux: KETTLEHOME.kettlekettle.propertiesSTARTDATE=20170701/job使, {START_DATE}.
repositories.xml: 存储设置的资源库信息。
shared.xml: 存储共享的对象信息。比如:db connecttions,partitions,steps等
其它文件无关紧要,
.languageChoice,语言设置信息。
.spoonrc Kettle的工作区属性设置信息。如:背景色,字体等.
db.cache-* 数据库缓存信息。

创建资源库

不同版本创建方式不一样,在Kettle 7.0里面,点右上角的Connect,弹出创建对话框。

这里选择Other Repositories。

然后选择File Repository (不选择Database Repository是因为无法进行版本控制)
然后点Get Started
连接资源库后,打开或者保存都会只显示相对路径
设置资源库的前提下,如果打开一个任务或者是转换,在保存时候,打开相应的属性界面(双击空白处也可打开)如下:

如果看到的这个路径是正确的,就可以直接保存。如果不正确,记得一定要选择正确路径保存,否则会把之前文件保存到根下面(资源库的根路径下“/” ),以致后面引用报找不到文件的错误。

常用组件介绍

Kettle资料,见我的Github
组件的使用,可以参考上面github里面的文档或者官方文档:
https://help.pentaho.com/Documentation/7.0/0L0/0Y0/0K0/ETL_Metadata_Injection

http://wiki.pentaho.com/display/EAI/Pentaho+Data+Integration+Steps

转换&Job

转换

ETL过程的具体实现,每个组件并不先后顺序,一旦启动转换,则每个转换组件同时执行!!!只是后面的组件在等待前面组件的数据处理完成给ta数据再执行本转换的具体处理逻辑。

在一些输出的组件里面,可以设置并行输出提高效率,在需要设置并行的组件上单击鼠标右键,选择change Number of Copies to Start,输入并行数量。注意:数量不能设置太大,可能导致OOM或者死机,一般0-30即可。由于组件之间是同时执行,对于写文件类的操作,并行会覆盖之前文件写入的记录,会导致数量不正确。在text 输出的组件里面勾选Append,则可以达到并行的效果。如下:



表输出设置并行没此问题。

在转换的输入步骤不能设置并行,否则会出现重复读取。除非源是分区的,并正确设置了Kettle分区特性,不过源一般很少在Kettle里面用并行(可以在数据库端加hint)。

处理出错步骤

在可能出错的组件上单击鼠标右键,选择Error Handling。

在弹出界面,设置错误信息的字段信息,关键错误信息描述在字段errDesc(数据库字段名或文件抬头名)。

然后OK,效果如下:

Job

控制转换的执行顺序。组件之间存在执行的先后顺序。
如下例子:

从START开始,然后执行load_order_data引用的转换,如果转换出错,执行Mail步骤,执行成功,则执行Success步骤。
其中A->B连线之间有3种图标,锁 表示不管A执行成功还是失败,都执行B
绿色的勾 表示:A执行成功,才执行B
红色的叉‘X’ 则表示A执行失败,再执行B
如果A–>B是灰线连接,则A执行后,不会执行B,如下:

如果有以下Job:

在load_account_data步骤执行完成后,是执行validate_account还是执行load_member_data,取决于你在设计时候,拉线的顺序,线先指向谁就执行谁,所以为了人工识别顺序,在上面做了一个标记,order 1,添加方法:在空白处,鼠标右键—new note即可。

或者是直接找到保存的kjb文件,用记事本编辑器打开该文件,在hops节点,搜索,load_account_data

在hop下面的from节点有2个叫load_account_data,区别是to节点内容不一样,xml文件从上到下解析,所以会先执行上面一个to节点的那一步,即validate_account,先拉线的一步,总是会在上面。

数据库连接里面的注意事项

MySQL乱码问题

Oracle RAC连接问题

1、 主机名称不填写。
2、 数据库名称填连接字符串:
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME=orcl)))
3、 端口填写为-1
4、 以上设置如果还不行,换个版本的jdbc驱动试试。

链接share

share后,该连接在其它转换或JOb里面可直接使用。

常用内部变量

Internal.Job.Filename.Directory:当前kjb作业文件的目录。
Internal.Transformation.Filename.Directory:当前ktr转换文件的目录。
如果设置了资源库,一般很少引用上面2变量,使用不正确,可能因路径不正确导致找不到文件。
在Kettle带有”s”符号标记可编辑的地方,按快捷键CTRL+ALT+SPACE 可弹所有定义的变量(包括内部和kettle.properties定义的变量)

关于set-pentaho-env.bat / set-pentaho-env.sh脚本

此脚本是设置Kettle的运行时环境变量,
上面说的设置KETTLE_HOME,JAVA_HOME可以在此处单独设置

转换&作业的命令行执行

执行转换:
设置资源库:
pan.bat -rep=”xdata” -trans=”generate_report” -dir=”/trans/” -level=Debug -logfile=”c:/a.log”
没资源库:
pan.sh –file=/app/load_data_to_report.ktr -level=Basic -logfile=”/app/logs/xxs.log”
执行作业:
设置资源库:
./kitchen.sh -rep=”xdata” -job=”load_special_date” -dir=”/jobs/” -level=Basic -logfile=”/app/logs/xx.log”
没用资源库时:
kitchen.sh -file=/app/kettle/RUN-MEMBER.kjb -level=Debug -logfile=”/app/kettle_log/ RUN-MEMBER.log_”$(date +%Y%m%d)
具体参见官方文档:https://help.pentaho.com/Documentation/7.0/0L0/0Y0/070

Kettle 内存设置

如果在运行过程中,报OOM错误,可以在Spoon.bat / Spoon.sh 文件里面,修改下面的值,调整允许Kettle使用的jvm内存的大小
PENTAHO_DI_JAVA_OPTIONS=”-Xms1024m -Xmx2048m -XX:MaxPermSize=256m”
还可以在里面添加其它JVM参数。

Kettle Variable scope

Kettle 支持在运行A转换/作业产生的一些值,在B转换/作业里面使用,有很多方法可以实现,其中一种简单的方法就是通过Set Variables组件,这个组件在转换里面如下图

Field name:需要设置变量的流字段名。
Variable name:设置的变量的名字。
Variable scope type:有4种值可以选,下面是官方对4个值的说明:

Define the scope of the variable, possible options are:

Valid in the virtual machine: the complete virtual machine will know about this variable.
Warning: this makes your transformation only fit to run in a stand-alone fashion. Running on an application server like on the Pentaho framework can become a problem. That is because other transformations running on the server will also see the changes this step makes.
对整个vm都有效,即是说在同一个jvm运行过程中的,所有作业和转换,都能读取到该变量,获取方式${变量名},或者在转换里面使用Get Variables组件来获取。

Valid in the parent job: the variable is only valid in the parent job.
只在父job有效。

Valid in the grand-parent job: the variable is valid in the grand-parent job and all the child jobs and transformations.
在父job的 上一级job以及该job 的子job/转换可见。

Valid in the root job: the variable is valid in the root job and all the child jobs and transformations.
有效范围为,整个job的入口job,以及入口job的子job/转换可见。

Job里面界面和设置有点区别,如下:

其实大体差不多,具体的自己做实验验证下吧。

Kettle集群设置

官方文档:
https://help.pentaho.com/Documentation/7.0/0L0/0Y0/060/060
在pwd目录下设置:

其中:carte-config-master-8080.xml内容:

carte-config-8081.xml内容:

carte-config-8082.xml内容:

配置好后,在每个Kettle节点启动:
Carte.sh /app/kettle/pwd/carte-config-master-8080.xml
Carte.sh /app/kettle/pwd/carte-config-8081.xml
Carte.sh /app/kettle/pwd/carte-config-8082.xml

Kettle分区的设计

参见官方说明:
https://help.pentaho.com/Documentation/7.0/0L0/0Y0/085
Kettle7.1官方文档:
https://help.pentaho.com/Documentation/7.1/0D0/Pentaho_Data_Integration

Kettle示例程序:kettle_demo

你可能感兴趣的:(BI)