重要提示: 经本人连续一周在mac-10.12.2和linux-6.5平台测试下,发现kettle版本6和版本7存在诸多 不稳定因素,其中最不可让人忍受的是spoon图形界面设计器由于消耗CPU资源太厉害,CPU资源达 到100%后kettle spoon设计器经常突然退出(注意kettle吃内存不是主要问题,当然它吃内存 也相当厉害,一般1G以上,导致突然退出的主要原因是CPU)。另外在mac中kitchen命令不能正常 执行repository job,总之 kettle-6.x 和 kettle-7.x问题重重,所以本人建议各位不要 着急图新鲜,最好还是使用kettle-4.x和kettle-5.x稳定版本(需要jdk1.6的支持,mac系统 下不建议使用),等新版本稳定之后再做升级。
bogon:~ zhangqingli$ brew install kettle
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
portmidi yasm
==> Using the sandbox
==> Downloading https://downloads.sourceforge.net/project/pentaho/Data%20Integra
==> Downloading from https://jaist.dl.sourceforge.net/project/pentaho/Data%20Int
######################################################################## 100.0%
==> Caveats
To have launchd start kettle now and restart at login:
brew services start kettle
Or, if you dont want/need a background service you can just run:
pdicarte /usr/local/etc/kettle/carte-config.xml
==> Summary
🍺 /usr/local/Cellar/kettle/6.1.0.1-196: 1,665 files, 871.6MB, built in 54 minutes 22 seconds
【注意下面三行】
brew services start kettle
pdicarte /usr/local/etc/kettle/carte-config.xml
/usr/local/Cellar/kettle/6.1.0.1-196
下载完成之后更改如下文件的版本号信息
与下载包对应即可,不然双击Data Integration.app启动图标可能启动不了程序
xx/Data Integration.app/Contents/Info.plist
后来发现可能做如下操作,就可以正常在mac打开kettle应用了:
1.将Data Integration.app从程序目录移动到mac系统的其他任意地方,然后双击试图打开kettle程序
实际上是打不开的;
2.再将Data Integration.app从其他地方再次移动到程序目录,双击试图打开kettle,发现可以打开了!
世界就是这么神奇诡异!
编辑spoon.sh文件
...
# ******************************************************************
# ** Set java runtime options **
# ** Change 2048m to higher values in case you run out of memory **
# ** or set the PENTAHO_DI_JAVA_OPTIONS environment variable **
# ******************************************************************
if [ -z "$PENTAHO_DI_JAVA_OPTIONS" ]; then
PENTAHO_DI_JAVA_OPTIONS="-Xms1024m -Xmx3072m -XX:MaxPermSize=256m"
fi
OPT="$OPT $PENTAHO_DI_JAVA_OPTIONS -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2 -Djava.library.path=$LIBPATH -DKETTLE_HOME=$KETTLE_HOME -DKETTLE_REPOSITORY=$KETTLE_REPOSITORY -DKETTLE_USER=$KETTLE_USER -DKETTLE_PASSWORD=$KETTLE_PASSWORD -DKETTLE_PLUGIN_PACKAGES=$KETTLE_PLUGIN_PACKAGES -DKETTLE_LOG_SIZE_LIMIT=$KETTLE_LOG_SIZE_LIMIT -DKETTLE_JNDI_ROOT=$KETTLE_JNDI_ROOT"
...
# 启动
nohup spoon.command > /dev/null 2>&1 &
# 运行
在本地运行
在远程运行
需要使用carte服务器(内嵌jetty),默认用户名密码为cluster/cluster
执行命令 carte 172.16.127.1 8100
集群方式运行
master节点,默认用户名密码为cluster/cluster
slave节点
注:更改carte的用户名密码
# 默认的用户名密码(cluster/cluster)
# 存在 pwd/kettle.pwd文件中
cluster: OBF:1v8w1uh21z7k1ym71z7i1ugo1v9q
# 修改carte服务器的用户名和密码
# 密码加密使用 encr.sh -carte test123
kinglyjn: xxx
# 资源库相关参数
/rep :资源库名称
/user :资源库用户名
/pass :资源库密码
/dir :目录(不要忘了前缀/)
/trans :要启动的转换名称(pan命令)
/job :要启动的作业名称(kitchen命令)
# 文件相关参数
/file :要启动的文件名(转换文件)
# 常用以及可选的参数
/level :日志级别(Error,Nothing,Minimal,Basic,Detailed,Debug,Rowlevel)
/logfile :要写入的日志文件 内存中保存日志的
/listdir :列出资源库的目录
/listrep :列出可用的资源库
/exprep :将资源中所有的对象导出到xml文件中
/norep :不要讲日志写到资源库中
/safemode :安全模式下运行,有额外的检查
/version :显示转换的版本,校订和创建日期
/param :设置参数,参数的格式paramname=paramvalue,例如-param:FOO=bar
/listparam :列出转换里已经设置好的参数
/listtrans :列出指定目录下的转换(pan命令)
/listjobs :列出指定目录下的作业(kitchen命令)
/export :把作业依赖的所有资源导出到一个zip文件里(kitchen命令)
# 减少内存溢出相关参数
/maxloglines :内存中保存日志的最大日志行数
/maxlogtimeout :内存中保存日志的最长时间
# 命令示例
# 执行test01.ktr文件,日志保存在~/test/log.txt中,默认日志输出级别为Basic
pan.sh /file:~/test/test01.ktr /logfile:~/test/log.txt /level:Basic
# 导出一个job文件,以及该job文件依赖的转换及其他资源
kitchen.sh /file:~/test/test01.kjb /export:~/test/a.zip
# 导出一个job文件,以及该job文件依赖的转换及其他资源
kitchen.sh /rep:dbserver-repository /user:admin /pass:xxxx /dir:/job_test/ /job:myjob01 /logfile:/home/centos/Desktop/myjob01.log /level:Basic
# 直接执行一个导出的zip文件(使用资源库导出的zip包不能正常执行,使用文件导出的zip包可以正常执行)
kitchen.sh /file:"zip:file:///c:/test/a.zip!job1.kjb"
# 执行一个资源库中的job(mac10.12.2下执行有问题,centos6下执行正常)
kitchen.sh /rep:dbserver-repository /user:admin /pass:xxxx /dir:/job_test/ /job:myjob01 /logfile:/home/centos/Desktop/myjob01.log /level:Basic
命令行的/logfile参数,将日志输出到指定的文件中。 linux管道符也可以将屏幕的日志输出重定向到日志文件。 默认的日志文件保存在 java.io.tempdir 目录中,文件名类似于 spoon_xxx.log。 为便于调试,spoon里的所有日志窗口,内容和日志文件相同。
# 内存中的日志太多,可能引起内存溢出的错误
# spoon运行时设置日志缓存大小
spoon的“选项”对话框里设置
“日志窗口的最大行数”
“内存中保留日志的时长”
“日志视图的最大行数”
# kettle.properties文件中设置
KETTLE_MAX_LOG_SIZE_IN_LINE 变量
KETTLE_MAX_LOG_TIMEOUT_IN_MINUTES 变量
# 转换有相关的四张日志表
转换日志表(记录转换的整体执行情况)
步骤日志表(记录转换中每一步骤的执行情况)
性能日志表(需要打开性能监控功能 edit-->settings-->监控, 打开监控后性能表的大小会急剧增加)
日志通道日志表(通过channel_id外键将上述三个表串联起来)
# 作业有相关的三张日志表
作业日志表
作业项日志表
日志通道日志表
# 设置数据库日志
edit-->settings-->logging
【注】所有标志“$”的输入框都可以使用变量作为其值,使用 ctl+alt+space 将会提示所有可用的变量
1.自定义常量数据(Data Grid,常用语测试)
2.生成记录(Generate Rows,常用语测试)
3.获取系统信息(Get System Info,常见的包括转换开始时间、关键时间点、主机名ip进程号等)
系统日期固定(表示转换开始的时间)
系统日期可变(表示每次运行都去获取操作系统的当前时间)
开始日期范围、结束日期范围(配合日志表使用)
命令行参数(Command Line 最多可以设置10个)
4.表输入
执行sql语句,从数据库中获取数据
i. 可以用过 ? 和 ${var} 的方式使用变量(配合Get System Info使用, ?
变量要求前面的步骤传来的参数的顺序要一致)
ii. 延迟转换
rs.getBytes(int) vs rs.getString(int)
iii. 表输入的数据类型如何和kettle数据类型对应?
ResultSetMetaData
5.文本文件输入
处理有列分隔符(限定符、逃逸字符)的文本文件
功能选项丰富,有错误处理机制
文件选择的方式:直接选择本地文件、从上一个步骤传递文件名
内容:封闭符、分隔符的设置(如果是ascii编码则可使用$[01]方式)、不可见字符输入、行头设置
过滤:内容过滤、选中/排除记录
字段:自动识别字段类型(不一定准确)
6.CSV文件输入
简化了文本文件输入
通过NIO、并行、延迟转换提高性能
7.列固定宽度文件
列固定宽度的文件,不用解析字符串,性能好
8.XML输入(DOM方式)
文件选择方式:直接选择本地文件、从上个步骤传递文件名
XMLPath:自动选择XMLPath循环路径
字段:自动或手动设置
使用DOM方式解析XML,使用简单,但由于一次性占用内存,它不能解析XML大文件
9.XML输入(SAX方式/或称流方式)
可用于处理XML大文件,处理方式更灵活,效率更高,但是使用较复杂,要写脚本或java代码
可参考 ../data-integration/samples/transaformations/*.ktr 中的例子
10.JSON输入
文件选择方式:直接选择本地文件、从上一个步骤传递文件名
JSONPath:手工设置路径(参考http://goessner.net/articles/JsonPath)
字段:自动识别字段
11.Excel输入
12.Access输入
13.配置文件输入
14.SAP输入
15.Orcle CDC增量输入
16.消息队列输入
17.PDF文件输入
18.搜索引擎结果输入
...
# 数据库表输出
表输出
使用sql的方式向数据库提交数据(如 insert语句)
支持批量提交、支持数据分区(要求分区字段类型为date型)、字段映射、返回自增列
如何进行错误处理?
更新、删除、插入/更新
批量加载(mysql、oracle)
# 文件输出
SQL文件输出
文本文件输出
XML输出
Excel Output/Excel Writer
# 其他输出方式
其他(报表、应用)