文档章节

kettle-manager

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

平台简介

出发点

专门为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. 根据日志加入一些统计功能

© 著作权归作者所有

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

评论(22)

马进举
马进举

引用来自“ww123”的评论

你好,百度网盘地址貌似没找到呀,能提供一下吗
额,呵呵,之前还没写完呢,文中有网盘地址了
ww123
ww123
你好,百度网盘地址貌似没找到呀,能提供一下吗
kettle调用存储过程有out参数,存储过程报错,kettle显示成功,抓不到有out参数的过程?

如问题所述,kettle调用存储过程有out参数,存储过程报错,kettle显示成功,kettle显示的是成功的,我是将存储过程的报错信息通过out的参数打印到oracle中的控制台了,但是kettle确抓取不到错...

zhenrx
2016/11/29
673
2
kettle界面语言修改成中文后,重启报错

今天在设置kettle的界面时,想看看中文是什么样子的,于是就把如图的地方都改成了中文 重启后,kettle启不来了一直报错 java.lang.ArrayIndexOutOfBoundsException: 5at org.pentaho.di.ui....

sucre03
2018/06/26
0
0
【转】kettle 的内存设置及输出日志的时间类型

本文转载自:http://blog.csdn.net/dqswuyundong/archive/2010/10/19/5952004.aspx 设置kettle的内存 REM REM Set java runtime options REM Change 256m to higher values in case you run ......

无声胜有声
2015/05/25
0
0
Win8使用CMD调用KJB,参数不能传入

流程如下: 在Spoon点击运行Job,设置变量后运行。结果正常输出。 在Win8执行CMD命令如下: D:\data-integration>Kitchen.bat /rep kettle /user admin /pass admin /dir tms_kettle /job t...

JoWn
2015/03/31
232
2
解决kettle调度效率低,不可高并发调度方法

“我在spoon里面运行一个作业只要几秒种,但是在命令行中运行却要好几十秒?” “并行同时运行几个job,就把内存撑爆了,Kettle好占资源呀!” Kettle作为用户规模最多的开源ETL工具,强大简...

波波夫空袭
2017/10/31
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Quartz监听器Listerner

概述 Quartz的监听器用于当任务调度中你所关注事件发生时,能够及时获取这一事件的通知。Quartz监听器主要有JobListener、TriggerListener、SchedulerListener三种,顾名思义,分别表示任务、...

大笨象会跳舞吧
昨天
9
0
Call exception, tries=10, retries=35, started=38348 ms ago, cancelled=false, msg=pc-node1 row

写hbase的问题,2019-01-18 23:23:28,082 | INFO | [hconnection-0x6431d54d-shared--pool2-t5] | Call exception, tries=10, retries=35, started=38348 ms ago, cancelled=false, msg=p......

stys35
昨天
4
0
docker 安装portainer、gogs、redis、mongodb、es、rabbitmq、mysql、jenkins、harbor

1、准备三台虚拟机ip如下 编号 Ip 1 192.168.100.101 2 192.168.100.102 3 192.168.100.103 2、镜像应用编排 192.168.100.101 主要安装系统运维相关服务 192.168.100.102 主要安装mysql、mon...

北岩
昨天
11
0
storm 提交任务报SocketException错误及解决办法

提交任务爆错: org.apache.storm.thrift.transport.TTransportException: java.net.SocketException: Broken pipe (Write failed) ..... Caused by: org.apache.storm.thrift.transport.TTr......

jingshishengxu
昨天
4
0
值得收藏:一份非常完整的MySQL规范

一、数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命...

Java干货分享
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部