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

  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. 新增字典翻译控件,支持缓存字段表,同时翻译多个字段。

  

kettle系列-1.kettle源码获取与运行的更多相关文章

  1. SequoiaDB 系列之七 :源码分析之catalog节点

    这一篇紧接着上一篇SequoiaDB 系列之六 :源码分析之coord节点来讲 在上一篇中,分析了coord转发数据包到catalog节点(也有可能是data节点,视情况而定).这一次,我们继续分析上 ...

  2. SequoiaDB 系列之六 :源码分析之coord节点

    好久不见. 在上一篇SequoiaDB 系列之五   :源码分析之main函数,有讲述进程开始运行时,会根据自身的角色,来初始化不同的CB(控制块,control block). 在之前的一篇Sequ ...

  3. Java集合系列[4]----LinkedHashMap源码分析

    这篇文章我们开始分析LinkedHashMap的源码,LinkedHashMap继承了HashMap,也就是说LinkedHashMap是在HashMap的基础上扩展而来的,因此在看LinkedHas ...

  4. Java并发系列[2]----AbstractQueuedSynchronizer源码分析之独占模式

    在上一篇<Java并发系列[1]----AbstractQueuedSynchronizer源码分析之概要分析>中我们介绍了AbstractQueuedSynchronizer基本的一些概 ...

  5. Java并发系列[3]----AbstractQueuedSynchronizer源码分析之共享模式

    通过上一篇的分析,我们知道了独占模式获取锁有三种方式,分别是不响应线程中断获取,响应线程中断获取,设置超时时间获取.在共享模式下获取锁的方式也是这三种,而且基本上都是大同小异,我们搞清楚了一种就能很快 ...

  6. Java并发系列[5]----ReentrantLock源码分析

    在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile.我们知道synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可 ...

  7. Mybatis 系列10-结合源码解析mybatis 的执行流程

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

  8. Mybatis 系列8-结合源码解析select、resultMap的用法

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

  9. Mybatis 系列7-结合源码解析核心CRUD 配置及用法

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

随机推荐

  1. Xshell远程管理Linux

    Xshell[1]是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议. Xshell 通过互联网到远程主机的安全连接以及它创新 ...

  2. java学习流程

    J2SE 面向对象-封装.继承.多态内存的分析递归集合类.泛型.自动打包与解包.Annotation IO 多线程.线程同步 TCP/UDP AWT.事件模型.匿名类 正则表达式反射机制 2:数据库( ...

  3. 【kAriOJ】离散数学 构造群码 极大似然法解码

    A. 编程题1 构造群码 时间限制 1000 ms 内存限制 65536 KB 题目描述 针对给定H,计算群码编码函数eH,并计算给定字的码字. 输入格式 第一行输入两个整数m,n:(m < n ...

  4. MySQL视图

    什么是视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 理解:使用SQL语句获取的结果, ...

  5. 鼠标拖动在picturebox上画圆时

    注意MouseDown MouseMove  MouseUp三个事件: MouseMove事件中要实现实时绘制和下次绘制时自动清除重绘 需要: pictureBox1.Invalidate(); pi ...

  6. Level Of Management Protocols - SNMP Tutorial

    30.2 The Level Of Management Protocols Originally, many wide area networks included management proto ...

  7. JavaScript写在Html页面的<head></head>中

    JavaScript写在Html页面的<head></head>中 ----------------- <html> <head> <style ...

  8. Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”

    Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...

  9. thinkphp 后台权限列表

    核心代码: // 检测用户权限权限 public function admin_priv($action){ $action_list = session('user.action_list'); i ...

  10. 深入理解javascript原型和闭包(2)——函数和对象的关系

    上文(理解javascript原型和作用域系列(1)——一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; co ...