文档章节

kettle-manager

马进举
 马进举
发布于 2017/06/18 23:53
字数 4722
阅读 20152
收藏 3

平台简介

出发点

专门为kettle这款优秀的ETL工具开发的web端管理工具。

kettle作为非常优秀的开源ETL工具得到了非常广泛的使用,一般的使用的都是使用客户端操作管理,但问题是当投入生产环境使用时,动辄上百或几百个job需要管理,这时在使用客户端管理已经很难完成了。我所知道的解决方案有用命令行的调用的,操作麻烦,总之还是很难用啦,还有就是开发web端管理工具,kettle自带了一个web端管理工具,界面极其简陋不说,还很难用,基本无法投入生产环境使用,其他没留意到还有没有较好对众多job进行管理的工具。

基于以上情况,和我近四年的kettle定制开发与使用经验。我设计并开发了这款kettle web端管理工具。

一些说明

  1. 本平台初版已经投入使用三年多了,我们公司已经在多地部署使用,开源以来,外部也有大量用户,所以基础的作业调度功能已经稳定,新添加的功能基本属于锦上添花,有些小bug也难免,欢迎反馈,让我们一起让他变得更好。
  2. 本系统是基于数据库资源库设计的,暂时不考虑支持文件资源库,当前支持oracle和mysql。
  3. 关于kettle版本的问题,我开发使用的是5.4版,用这个当然更好,其他版本也是可以的,我测试了5.1、5.4、7.0都是可以使用的,7.1是有问题的,以后测试,本系统只调用了kettle一些基础api,版本相差不是太大应该都是可以的。

关键信息

  1. 项目博客地址
  2. 项目源码地址
  3. 问题反馈邮箱:jinjuma@yeah.net。
  4. 项目交流qq群:320302530(已满勿加),交流2群:142104962(已满勿加),交流3群:142105082。
  5. qq群说明:群主也要上班,请自己多思考,大家相互帮助。本群主要支持如何更好的使用本平台,github上就是完整的源码,加上部署包中的jar肯定是可以运行起来的,这里不回答源码部署问题,都不看部署教程,直接上源码的可以退了,这不适合你。
  6. 项目网盘地址
  7. 群里已经有不少人运行起来开始使用了,也有部分人源码搞好了,可是很少有人回答新人问题,很少有人能做到相互帮助,我也很无奈,我哪里经得住天天问。只要你认真仔细阅读本博客大部分常见问题都能得到解决,可以在群里询问,偶尔也是有热心人回答得。
    

更新简介

刚开发完成的一些的功能完善和部分新功能的添加,还没有正式发布,现在放出0.3.0版的急速体验版。

以下就是0.3.0的更新日志:

  1. 优化结束功能。【之前偶有一些作业卡死的情况出现,停止结束都不行,只能重启平台,如果作业很多这会导致我们的作业一段时间的中断,毕竟重启也需要时间,特别是作业较多时,这里的优化是为了尽量减少重启的次数】。
  2. 支持配置作业在重启时的启动顺序,这样可以让紧急的任务优先启动。【这个是为了在我们迫不得已重启时优先启动紧急程度高的作业,然后慢慢启动不急的作业,从而减小重启对业务的影响】。
  3. 新增作业日志级别设置。【在kettle中运行时我们可以设置作业的日志级别,在调试发现问题时比较有用,现在本平台也支持为作业设置日志级别,方便查看更详细的日志,或减少不必要的日志】。
  4. 新增作业复制功能,很有用,此功能可用于很多参数化的作业。【即作业处理流程一致,通过修改参数重复使用的作业,这样的作业只需设计一个,然后就可以直接在管理页面复制,通过设置参数达到重复使用的目的】。
  5. 提供全量表对表作业、转换包装作业模板用于在管理页面复制,以支持直接在管理页面包装转换并运行、直接在管理页面配置表对表的全量抽取作业。【这里就是利用了上面的作业复制功能】。
  6. 新增转换查看功能。【支持查看资源库中的转换,结合上面的转换包装模板,可以直接在管理界面将转换包装为作业,然后就可以使用为作业开发的全部功能了】。
  7. 新增作业日志正则匹配预警日志生成。【对于一些自身作业设计不完善,没有考虑的异常等,本平台新增异常日志表,将通过正则匹配作业日志,出现异常将立即记录异常日志。实际体验感觉很不错,能加快发现作业错误】。
  8. 异常日志截取更加精准,一般不用下载完整日志文件就能看到具体异常信息
  9. 增加日志查看运行日志时自动刷新功能。
  10. 增加查看作业图和转换图功能。

极速体验

极速体验能让你尽快的体验本项目的功能,判断这是否是你所需要的。

当前提供了极速体验0.3.0版,是当前km的最新版本。

  1. 集成安装包直接集成了kettle、mysql、kettle-manager,这样能减低对部署人员的技术要求。
  2. 下载集成安装包,按安装包中的文档操作即可,很简单几步,还配有截图,应该算是没有难度了。
  3. 关键提示:执行init.bat脚本是要采用管理员模式运行,否则无法正常安装mysql服务。

平台部署

平台部署包简介

部署相关文件都会上传到网盘中,当前最新版为0.2.0,项目网盘地址

各版本间不能混用,要安装一个版本需要删除上一个版本的数据库和全部文件,全新的按照本教程安装。

image

以下就是0.2.0版解压后的包结构,我们需要关注的主要有default目录下配置文件和两个km启动脚本,脚本可以点开看一下,有助于你发现部署中的问题。

image

部署包中不包含kettle的jar,会通过环境变量KETTLE_HOME关联到你的kettle的jar,从而支持你下载的kettle版本,这一点从启动脚本可以看出来,所以部署时你需要创建这个环境变量。

以下是default目录下的配置文件的介绍,其中我们重点关注jdbc.config文件,这是数据库配置文件,其他文件大部分默认既可以,出问题再去看。

切记不要用windows的记事本编辑配置文件,否则会导致配置信息无法读取引发空指针异常。

image

基础环境

本平台需要jdk1.7及以上,请自行安装好,不会的请网上搜索。

数据库

本系统支持oracle和mysql数据库,所有你需要有一个oracle或mysql数据库。之前的集成安装包是集成了mysql数据库的,转念一想既然这是一个ETL管理系统,大家应该都是会搞数据库的,应该比我厉害得多,所以数据库还是你们自己搞吧。

Oracle

  1. 在oracle中创建本系统的数据库用户km。也可自定义使用其他已有用户,在修改数据配置时对应的将km用户改为你的用户。
  2. 先看以下脚本说明,脚本在部署包中的目录:doc\sql\oracle。 image
  3. KM的结构和数据执行km.sql导入即可。
  4. 原始kettle资源库的数据库中执行myNote.sql中的对应的sql脚本(若使用我提供的资源库建表语句kettle.sql则不用执行,已经包含了)。
  5. 配置文件修改,配置文件在部署包中的位置:default/jdbc.config,以下是oracle配置参考:

image

Mysql

  1. 在mysql中创建本系统的数据库km。也可自定义使用其他已有数据库,在修改数据配置时对应的将km数据库改为你的数据库。
  2. 先看以下脚本说明,与oracle一样,脚本在部署包中的目录:doc\sql\mysql。 image
  3. KM的结构和数据直接在km数据库中运行km.sql既可以。
  4. 原始kettle资源库的数据库中执行myNote.sql中的对应的sql脚本(若使用我提供的资源库建表语句kettle.sql则不用执行,已经包含了)。
  5. 配置文件修改,配置文件在部署包中的位置:default/jdbc.config,以下是mysql配置参考:

image

环境变量配置

设置环境变量:KETTLE_HOME=D:\NIS\data-integration5.4,具体的目录根据自己的实际情况设置,该变量用于在项目启动脚本中引用kettle的jar和关联你的kettle中的插件等。

win和linux都是需要配置。你也可以不配置,直接修改对应的启动脚本,去掉其中的KETTLE_HOME设置注释,在启动脚本中配置该变量。

参考下图验证环境变量是否生效,windows配置了环境变量需要重新打开cmd窗口才会生效哦。

image

这里的kettle推荐使用5.4,我开发时使用的5.4,遇到问题的概率要低些,其他版本遇到问题请反馈,我会在后续的版本中考虑。

我使用的kettle在网盘中也是有的。

Windows运行

Windows请运行km.bat脚本。 以下是默认展示的帮助信息。

image

Linux运行

Linux下运行km.sh脚本。 以下是默认展示的帮助信息。

image

平台访问

长点心吧,我上面截图的状态并没有运行项目,只是展示了命令行帮助信息,看下内容还能不知道怎么运行么???哎,km.bat -start

运行正常后就可以访问了,默认地址是:http://127.0.0.1:82 ,v0.2.0版的默认端口是86,若运行时修改了端口,这里对应修改即可。默认kettle账号:kettle/kettle。

功能介绍

主界面

image

参数设置

job运行参数设置,可以在页面上设置作业运行参数,每次运行作业时会用设置的参数覆盖默认值,这个很多人用不上。

image image

定时设置

操作界面与kettle中的开始控件界面一致,这个可能是最优用的功能之一。

image image

运行与停止

核心功能就不说了。

image

强制结束

强制结束等待的作业,针对正常停止无效的情况。

image

实时日志

实时查看作业运行日志,这个功能看起来不起眼,实际应该是很有用的。

image

作业目录

获取作业目录。

image

新建作业

支持页面新建特定类的作业,当前是四类。这些作业都支持页面修改。其中的KM作业是基于我的插件开发。这里的作业继承com.oss.job.AbsJob,这样的作业支持这里的KM作业,也支持下面的定时调度使用。

image image

删除作业

支持批量删除作业,这个很危险哦,小心使用,不会删除子转换和作业。

image

失败重启

支持配置失败自动重启、将job_version字段作为作业类别使用,便于分类管理。

image

定时调度

支持cron定时的调度,所有类必须继承:com.oss.job.AbsJob,作业支持参数配置,同一个类可以重复使用,传入不同的参数。这样开发的作业页支持用于上面的KM作业配置。

image image

con设计

引入一个cron辅助设计模块

image

按顺序运行

我已经开发好了一个上面的KM作业:com.oss.job.KettleJobRunner,这样的作业可以作为KM作业使用,也可以用于定时调度使用。

这个作业已经包含在项目中了,可以直接使用。

请参考KM作业示例和定时调度示例。

运行状态

作业的运行状态会定时反映到管理界面,我们可以通过多种条件筛选我们需要的作业进行批量运行或停止。

完成作业状态更新,日志文件记录的类:com.oss.job.JobManager,使用方式与按顺序运行的作业类似,请参考使用。

为了使部署简单,项目默认不依赖我开发的插件,你不使用KM作业功能,就不需要我开发的插件,项目默认已经在定时调度配置了该作业,并默认运行。

image

平台级日志

一般好的作业设计都会记录自己的日志表,详细记录作业运行状况,本平台提供了平台级日志功能,不涉及业务,记录了作业的开始停止时间,最终运行结果。

image

日志文件按天分文件夹存放,日志文件大小可以配置,若觉得占用空间,可以设计一个作业进行定时清理以前的日志文件,后续会提供该作业。也可以配置为不写日志文件。

该功能也是由com.oss.job.JobManager作业实现。与运行状态更新是同一个作业。

image

业务日志

Km数据库中有一张我设计的专门用于记录业务日志的表:METL_KETTLE_LOG,这个表是根据我们平常设计作业的经验设计的,需要作业设计人员在设计作业时填充此表数据,本平台已经默认提供了此表的查询。

此日志与平台级日志是互补关系,此日志更详细,涉及业务,平台级日志是后盾,主要用于问题排查等。

image image

KM作业示例

image

JS作业示例

该作业前部分操作基本与KM类似,区别在于具体的js基本配置

image

SQL作业示例

该作业前部分操作基本与KM类似,区别在于需要选择数据库,然后就是数据库脚本了

image

Shell作业示例

该作业前部分操作基本与KM类似,额外的需要配置脚本运行路径,默认:/tmp。

作业在linux上运行就写shell脚本,在windows上运行就写bat脚本。

都比较直观,就不多说了。

image

定时调度示例

image image

源码构建

  1. 一般都不需要自己开发,直接使用就行,若有bug或新功能需求,可以发邮件给我。
  2. 本项目基于开源项目EOVA开发:EOVA
  3. 若想进一步扩展功能,建议先搭建kettle开发环境,可以参考我的博文:kettle源码讲解
  4. 我的博客中还有多篇文章介绍kettle的源码等,可以作为参考。
  5. github上就是完整的源码,加上部署包中的jar肯定是可以运行起来的,都不看部署教程,先将部署包运行起来,直接上源码的可以撤了,这个不适合你。

常见问题

Kettle7.0注意事项

Kettle7会报如下错误信息:

image

这个错误不影响使用,但不好看不是。所以我还是说一下怎么消除这个错误。 网盘中有如下文件,解压到本应用的根目录就可以了。这个问题是因为kettle的一个日志插件没有找到日志配置文件。

image

怎么将作业添加到本平台

本平台是直接读取你数据库资源的v_job视图,这个视图包装了一下r_job表,你可以通过修改视图达到隐藏一些作业的目的。

R_job是kettle资源库的系统表,只要你连接这个资源库设计的作业,都会记录在这个表中,所以你只需按照平常的习惯,连接与本平台配置的相同的资源库设计作业即可,因为读取的是同一张表,所以不需要额外的操作,直接就可以在本平台中看到你的作业并进行调度。

有外部作业需要添加到本平台,你只需直接使用kettle的Spoon工具,连接同一个资源库进行导入操作,这个数据人员都很熟悉。

我觉得没必要在页面支持作业导入功能,不知是否有这样的需求,这个暂时不开发。

怎么查看运行转换

关于这个问题,我一直很困惑,为毛要直接查询运行转换,作业和转换可谓各司其职,我认为要运行转换就需要在其上包装一个作业,不管是否有其他流程依赖的需求。

当前新版本已经提供转换查看功能,支持直接在调度中将转换包装为作业进行运行。

注意事项

  1. 不要使用系统自带的记事本编辑配置文件,否则会导致系统无法正常读取你修改的配置文件,可以使用editpuls或notepad++。当出现奇葩问题时要想起这个提示。
  2. 相关文件最好不要存放在有空格或中文的目录下,避免不必要的麻烦。

后续计划

  1. 支持简单的表对表作业新增。
  2. 考虑新增转换管理,开发通用km作业支持转换运行。
  3. 一个job同时在多个km中运行还需要考虑,日志,状态等
  4. 任务管理在设置定时时可能需要人为分散定时,考虑生成时间-运行任务数的分析图辅助进行分散定时。
  5. 作业管理显示运行倒计时。
  6. 作业管理支持配置文件资源库运行。
  7. 改为支持文件资源库和更多数据库作为资源库。
  8. 权限管理,不同用户看到自己的作业,管理员看所有作业。
  9. 分布式、集群支持,考虑增加容灾机制。
  10. 根据日志加入一些统计功能

© 著作权归作者所有

共有 人打赏支持
马进举
粉丝 34
博文 6
码字总数 7987
作品 1
遂宁
私信 提问
加载中

评论(20)

老王买房
老王买房
你好,
我直接拉的kettle7.1的lib,然后启动kettle.init()
然后有如下报错是否需要启动karafboot的服务,不知道你是否遇到过,谢谢
[11/23 14:22:03] [WARN] KarafBoot: Karaf not found in standard dir of './system/karaf'
Logger--> WARN{KarafBoot.java:96}-Karaf not found in standard dir of './system/karaf'
[11/23 14:22:03] [ERROR] KarafBoot: Error starting Karaf
java.io.FileNotFoundException: Source '.\system\karaf' does not exist
  at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1298)
  at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1240)
  at org.pentaho.platform.osgi.KarafBoot.startup(KarafBoot.java:187)
  at org.pentaho.di.osgi.registryExtension.OSGIPluginRegistryExtension.init(OSGIPluginRegistryExtension.java:109)
  at org.pentaho.di.core.plugins.PluginRegistry.init(PluginRegistry.java:596)

s
swaddy
作者你好,请教两个问题,
1. 我是在linux上连接mysql的,平台搭起来后,8小时就会连接超时,执行job的时候就会抛异常,连接url上已经加了autoReconnect=true
org.pentaho.di.core.exception.KettleDatabaseException:
ERROR executing query
The last packet successfully received from the server was 59,279,621 milliseconds ago. The last packet sent successfully to the server was 59,279,622 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.

at org.pentaho.di.core.database.Database.openQuery(Database.java:1776)
at org.pentaho.di.repository.kdr.delegates.KettleDatabaseRepositoryConnectionDelegate.getIDs(KettleDatabaseRepositoryConnectionDelegate.java:1576)
请问有什么好的解决方法吗,目前已知的是使用c3p0的连接池,不知作者有没有改写的打算
2. myutils.jar和KettleUtil的源码(非jar包)在哪里呢,如果作者不加我可能试着加一下c3p0的连接池
马进举
马进举

引用来自“ClayJ”的评论

您好,com.oss.job包下的import org.beetl.sql.core.db.Db, org.beetl.sql.core.db下没有Db这个类啊
这个是自己写的,在myutils.jar中
马进举
马进举

引用来自“yaolu123”的评论

请问您这个导入到eclipse后该需要修改些什么才能够运行?
源码就是我这里原封不动提供的,关于源码能说的博客中已经说了,群中已经有不少人运行起来了,只是他们运行起来后就不怎么出现了,这个只能看自己本事了。
马进举
马进举

引用来自“nsz007”的评论

你好 问下StringUtil.isNotBlank() 这个方法在myutils.jar包中 不存在
那个类是继承Apache的工具类的。。。
nsz007
nsz007
你好 问下StringUtil.isNotBlank() 这个方法在myutils.jar包中 不存在
yaolu123
yaolu123
请问您这个导入到eclipse后该需要修改些什么才能够运行?
ClayJ
ClayJ
您好,com.oss.job包下的import org.beetl.sql.core.db.Db, org.beetl.sql.core.db下没有Db这个类啊
马进举
马进举

引用来自“ww123”的评论

你好,百度网盘地址貌似没找到呀,能提供一下吗
额,呵呵,之前还没写完呢,文中有网盘地址了
ww123
ww123
你好,百度网盘地址貌似没找到呀,能提供一下吗
Kettle 调用方式

在使用Kettle执行Job或者转换的时候有多种方式,例如: 一:通过命令行来执行 kitchen.sh来执行指定的Job,例如: 通过"Pan.bat"来执行指定的转换,例如: 二:通过Java API 接口在代码中执行...

mybabe0312
2017/04/06
0
0
使用Kettle导入Excel数据

使用Kettle导入Excel数据 曾静的技术博客2017-08-2022 阅读 导入数据kettleExcel ETL(Extraction, Transformation, and Loading),在日常的工作中我们经常会遇到各种数据的处理,转换,迁移...

曾静的技术博客
2017/08/20
0
0
Hawkular 1.0 Alpha1 发布,监控解决方案

Hawkular 1.0 Alpha1 发布了,Hawkular 是一个开源的监控解决方案,是 RHQ 项目 的改进版本,受益于多年的经验,Hawkular 设计之初就考虑模块化和可伸缩性,因此组件可在应用之外进行重用。H...

oschina
2015/06/05
804
0
kettle下转移mongo中数据到mysql中

版权声明:本文为博主原创文章,未经博主允许不得转载。请注明博客地址(http://blog.csdn.net/gsying1474) https://blog.csdn.net/gsying1474/article/details/54140108 Kettle是一款国外开...

刘迎光-萤火虫工作室
2017/01/06
0
0
Win7下Kettle-7.0安装部署

1、Kettle概念 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。 Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种...

zisheng_wang_data
2017/03/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AMD重回服务器:Oracle甲骨文宣布将使用AMD EPYC处理器

导读 AMD的EPYC的推出,让AMD重新有了在服务器级,数据中心级等大型政企领域的竞争机会。如今,很多云服务商开始使用EPYC处理器,Oracle也在近期宣布了将使用EPYC处理器的消息。 甲骨文也公布...

问题终结者
昨天
3
0
细述hbase协处理器

1.起因(Why HBase Coprocessor) HBase作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执行求和、计数、排序等操作。比如,在旧版本的(<0.92)Hbase中,统计数据表的...

微笑向暖wx
昨天
3
0
【实践】如何获得Rinkeby网络的测试以太币

当把智能合约部署到Rinkeby Test Network时,需要获得测试以太币。其网络获取测试以太币的方法同Ropsten Test Network有些不同,本文详细讲解一下。 1 访问网站 访问rinkeby网络(https://w...

HiBlock
昨天
2
0
Logback中如何自定义灵活的日志过滤规则

当我们需要对日志的打印要做一些范围的控制的时候,通常都是通过为各个Appender设置不同的Filter配置来实现。在Logback中自带了两个过滤器实现:ch.qos.logback.classic.filter.LevelFilter...

程序猿DD
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部