kettle系列-1.kettle源码获取与运行
第一次写博客,心里有点小激动,肯定有很多需要改进的地方,望海涵。
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或以上版本。
- 在eclipse导入已经存在的项目,将core、engine、ui、DB Dialog、和kettle项目本身导入eclipse,如下图所示,其他关闭的项目可以不用导入。

- 在eclipse中创建User Libraries(用户库),将下载的可运行的kettle目录下的lib目录全部添加到该用户库中,然后移除其中core、engine、ui、DB Dialog等四个jar包,再将libswt\win32目录下的swt.jar加入该用户库中,具体如下图所示。

- 然后依次右键上述导入的项目选择bulid path,将上一步创建的用户库加入类路径中,然后engine、ui、DB Dialog三个项目都依赖core,ui还要依赖engine、DB Dialog两个项目,最后还有主项目依赖上述四个项目和kettle用户库,如下图所示。

- assembly下的package-res添加为源文件如下图所示。

- 这下应该就可以成功运行kettle了,如下方式运行:

- kettle源码运行结果

上述就是我运行kettle源码的方式,方式肯定有很多,这种方式应该不算难,特别是依赖jar的解决,kettle使用的是ant管理项目的,一来我平常都是使用maven管理项目,对ant不太熟悉,二来ant方式很多jar包根本下载不到。
这里只是为了分享下自己运行kettle源码的方式,说实话刚接触kettle源码时真没运行起来,隔了好长一段时间后再次尝试才成功运行的。若想用上述方式运行又觉得麻烦的可以先按上述方式创建好以kettle命名的用户库。然后从我的github上下载配置好的kettle项目,理论上下载下来就可以用。方式如下:
- 按上面的步骤下载kettle安装包后在eclipse中创建好用户库。
- 从https://github.com/ma459006574/pentaho-kettle.git 这个地址clone代码到本地,切换到my_run分支再导入eclipse就可以了。与官方的差别只在各项目的.classpath文件,你也可以对比差异自行配置。
后续我将介绍kettle源码结构,分享部分kettle控件改进,还会将自己定制化开发kettle(将kettle的部分功能封装到web应用中)的过程中写的kettle定制开发工具类分出来,大家一起进步。
下面是在使用kettle过程中觉得需要改进的地方:
- excel 07版支持不好,07版excel两种解析工具效果都不好,poi大文件会内存溢出。
- excel输入控件获取sheet时本可以直接获取,结果弄得比较复杂。
- poi streaming存在bug,会占用文件。
- poi streaming以string读取时间时为数字。
- poi streaming部分列为空时数据错乱。
- 抽取ui部分方法为工具类,方便web定制开发。
- 数据库只要连接失败一次,后面即使数据恢复正常,kettle的连接也一直失败了。可以改为设置定时重连,涉及面较广。
- rar压缩文件的处理,解压控件新增选项:保留目录结构,默认勾选,不勾选则全部文件解压到指定目录。
- 解压控件的解压成功后移动到指定目录和删除文件功能有bug,他是对设定的根目录操作。
- zip解压中文目录乱码问题,kettle使用的是jdk自带解压工具类,暂时修改vfs的jar,新增编码设置,jdk6不支持设置编码,需要升级到jdk7。
- 压缩控件支持加密,可以更换zip解压工具为zip4j,可统一设置密码,也可从上一个流中获取。
- 添加操作zookeper控件,可以监控节点变化等。
- ftp下载控件检测目录存在时,中文目录都会失败,因为检测目录时并没有使用用户设定的编码。
- job开始那个定时应加一个选项,job开始先运行一次,之后再按设定的时间运行。
- InsertUpdate 288~293行无用代码。
- 测试分析后台kettle运行十几个job性能就很差了及性能优化。因为数据库资源库读取转换太慢了。
- xbaseinput当没有文件时没有设置输出结束,导致后面的步骤一直等待。
- 新增字典翻译控件,支持缓存字段表,同时翻译多个字段。
kettle系列-1.kettle源码获取与运行的更多相关文章
- SequoiaDB 系列之七 :源码分析之catalog节点
这一篇紧接着上一篇SequoiaDB 系列之六 :源码分析之coord节点来讲 在上一篇中,分析了coord转发数据包到catalog节点(也有可能是data节点,视情况而定).这一次,我们继续分析上 ...
- SequoiaDB 系列之六 :源码分析之coord节点
好久不见. 在上一篇SequoiaDB 系列之五 :源码分析之main函数,有讲述进程开始运行时,会根据自身的角色,来初始化不同的CB(控制块,control block). 在之前的一篇Sequ ...
- Java集合系列[4]----LinkedHashMap源码分析
这篇文章我们开始分析LinkedHashMap的源码,LinkedHashMap继承了HashMap,也就是说LinkedHashMap是在HashMap的基础上扩展而来的,因此在看LinkedHas ...
- Java并发系列[2]----AbstractQueuedSynchronizer源码分析之独占模式
在上一篇<Java并发系列[1]----AbstractQueuedSynchronizer源码分析之概要分析>中我们介绍了AbstractQueuedSynchronizer基本的一些概 ...
- Java并发系列[3]----AbstractQueuedSynchronizer源码分析之共享模式
通过上一篇的分析,我们知道了独占模式获取锁有三种方式,分别是不响应线程中断获取,响应线程中断获取,设置超时时间获取.在共享模式下获取锁的方式也是这三种,而且基本上都是大同小异,我们搞清楚了一种就能很快 ...
- Java并发系列[5]----ReentrantLock源码分析
在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile.我们知道synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可 ...
- Mybatis 系列10-结合源码解析mybatis 的执行流程
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
- Mybatis 系列8-结合源码解析select、resultMap的用法
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
- Mybatis 系列7-结合源码解析核心CRUD 配置及用法
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
随机推荐
- 基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!
基于泛型的依赖注入.当我们的项目中有很多的Model时,相应的Dao(DaoImpl),Service(ServiceImpl)也会增多. 而我们对这些Model的操作很多都是类似的,下面是我举出的一 ...
- ecliplse高亮显示选中的相同变量
选择:windows-> preferences->java->Editor->Mark Occurences 选择最上的复选框,下面的就有很多了. 其中的Local vari ...
- 线性回归 Linear Regression
成本函数(cost function)也叫损失函数(loss function),用来定义模型与观测值的误差.模型预测的价格与训练集数据的差异称为残差(residuals)或训练误差(test err ...
- QQ个人文件夹中的文件被占用,解决办法
我的情况是记住密码的账号不可以登录,不记住密码的账号确可以登录,突然就这样,我也很郁闷. 找到路径C:\Users\Public\Documents\Tencent\QQ下的UserDataInfo. ...
- shiro登陆后没有返回设置的successUrl?
第一次学习shiro的时候,并没有发现很大的问题.但后来在做项目的时候,特别是当访问的url是iframe的页面的时候,session又过期了,跳转到登陆页,完成登陆操作后,返回了只有iframe的页 ...
- BZOJ1491: [NOI2007]社交网络
传送门 最短路计数问题.因为数据量非常小($N \leq 100$),所以Floyd随便搞搞就行了. $f[i][j]$表示路径长度,$g[i][j]$表示最短路方案数. 先跑一遍裸的Floyd,然后 ...
- JS中的decodeURIComponent和encodeURIComponent
两个函数可以对特定函数生成的密码字符串进行解密操作,就可以生成为未解密的字符串 使用方法: //加密 encodeURIComponent("http://www.cnblogs.com/7 ...
- 英文写作——冠词的使用(Use 0f Articles)
1.使用'a','an','the'和不使用冠词的基本规则: <1>泛指,不可数名词不能有任何冠词 <2>泛指,可数,复数名词前不能有冠词 <3>泛指,可数,单数名 ...
- C# Process.Start()方法详解
System.Diagnostics.Process.Start(); 能做什么呢?它主要有以下几个功能: 1.打开某个链接网址(弹窗). 2.定位打开某个文件目录. 3.打开系统特殊文件夹,如“控制 ...
- UnknownHandler
未知处理器 从struts2.1 开始 ,struts2配置文件的DTD中增加了<unknown-handler-stack…/>和<unknown-handler-ref…/> ...