本文主要介绍kettle源码的获取与在eclipse中将源码运行起来。

  第一次写博客,心里有点小激动,肯定有很多需要改进的地方,望海涵。

  kettle算是我相对较为深入研究过的开源软件了,也是我最喜欢的开源软件之一,它可以完成工作中很多体力劳动,在ETL数据抽取方面得到了广泛的使用。我本身对kettle的各个控件使用也不是很熟悉,只会使用最常见的部分控件,就是这样简单的使用也被它的美深深的吸引住了。

  好了,进入正题,这里假设你熟悉java开发、git一般使用、kettle一般使用。kettle源码之前托管在kettle官方的svn上,后来迁移到了github上,在github上的地址是:https://github.com/pentaho/pentaho-kettle,建议注册自己的github账户,然后将kettle项目fork一份到自己用户下,接着进入工作目录(如:E:/workspace)使用如下命令将代码克隆到本地。

git clone https://github.com/pentaho/pentaho-kettle

  下载代码的同时你可以到:http://community.pentaho.com/projects/data-integration/ 这个地址下载最新的kettle发布版。都下载完成后按以下步骤最终可以成功运行kettle源码。建议使用jdk7或以上版本。

  1. 在eclipse导入已经存在的项目,将core、engine、ui、DB Dialog、和kettle项目本身导入eclipse,如下图所示,其他关闭的项目可以不用导入。
  2. 在eclipse中创建User Libraries(用户库),将下载的可运行的kettle目录下的lib目录全部添加到该用户库中,然后移除其中core、engine、ui、DB Dialog等四个jar包,再将libswt\win32目录下的swt.jar加入该用户库中,具体如下图所示。
  3. 然后依次右键上述导入的项目选择bulid path,将上一步创建的用户库加入类路径中,然后engine、ui、DB Dialog三个项目都依赖core,ui还要依赖engine、DB Dialog两个项目,最后还有主项目依赖上述四个项目和kettle用户库,如下图所示。
  4. assembly下的package-res添加为源文件如下图所示。
  5. 这下应该就可以成功运行kettle了,如下方式运行:
  6. kettle源码运行结果

  上述就是我运行kettle源码的方式,方式肯定有很多,这种方式应该不算难,特别是依赖jar的解决,kettle使用的是ant管理项目的,一来我平常都是使用maven管理项目,对ant不太熟悉,二来ant方式很多jar包根本下载不到。

  这里只是为了分享下自己运行kettle源码的方式,说实话刚接触kettle源码时真没运行起来,隔了好长一段时间后再次尝试才成功运行的。若想用上述方式运行又觉得麻烦的可以先按上述方式创建好以kettle命名的用户库。然后从我的github上下载配置好的kettle项目,理论上下载下来就可以用。方式如下:

  1. 按上面的步骤下载kettle安装包后在eclipse中创建好用户库。
  2. 从https://github.com/ma459006574/pentaho-kettle.git 这个地址clone代码到本地,切换到my_run分支再导入eclipse就可以了。与官方的差别只在各项目的.classpath文件,你也可以对比差异自行配置。

  后续我将介绍kettle源码结构,分享部分kettle控件改进,还会将自己定制化开发kettle(将kettle的部分功能封装到web应用中)的过程中写的kettle定制开发工具类分出来,大家一起进步。

  下面是在使用kettle过程中觉得需要改进的地方:

  1. excel 07版支持不好,07版excel两种解析工具效果都不好,poi大文件会内存溢出。
  2. excel输入控件获取sheet时本可以直接获取,结果弄得比较复杂。
  3. poi streaming存在bug,会占用文件。
  4. poi streaming以string读取时间时为数字。
  5. poi streaming部分列为空时数据错乱。
  6. 抽取ui部分方法为工具类,方便web定制开发。
  7. 数据库只要连接失败一次,后面即使数据恢复正常,kettle的连接也一直失败了。可以改为设置定时重连,涉及面较广。
  8. rar压缩文件的处理,解压控件新增选项:保留目录结构,默认勾选,不勾选则全部文件解压到指定目录。
  9. 解压控件的解压成功后移动到指定目录和删除文件功能有bug,他是对设定的根目录操作。
  10. zip解压中文目录乱码问题,kettle使用的是jdk自带解压工具类,暂时修改vfs的jar,新增编码设置,jdk6不支持设置编码,需要升级到jdk7。
  11. 压缩控件支持加密,可以更换zip解压工具为zip4j,可统一设置密码,也可从上一个流中获取。
  12. 添加操作zookeper控件,可以监控节点变化等。
  13. ftp下载控件检测目录存在时,中文目录都会失败,因为检测目录时并没有使用用户设定的编码。
  14. job开始那个定时应加一个选项,job开始先运行一次,之后再按设定的时间运行。
  15. InsertUpdate 288~293行无用代码。
  16. 测试分析后台kettle运行十几个job性能就很差了及性能优化。因为数据库资源库读取转换太慢了。
  17. xbaseinput当没有文件时没有设置输出结束,导致后面的步骤一直等待。
  18. 新增字典翻译控件,支持缓存字段表,同时翻译多个字段。