TASKCTL ETL 作业类型的插件与维护管理
什么是作业驱动插件
首先,我们通过一个示意图来了解 TASKCTL 对各种作业类型的调用过程,并理解什么是插件,以及插件的作用。
整个过程的解释如下:
调度核心发起一个作业的调度请求,并将 A 类型作业 A_JOB1 的完成描述信息传递出去。
在具体的执行节点代理端(哪个执行代理,由 A_JOB1 的 agentid 属性决定),一个叫 ctlcpg 的组件会接收第一步 ctlfdc 发出执行指令信息,并立即调用相应的插件程序(一般情况下,插件程序就是一个 shell 脚本),同时,将完整的 A_JOB1 描述信息传递到该插件。
A 插件程序通过统一入口参数接收完整的作业信息,解析该信息,并执行具体作业程序 A_JOB1。
A_JOB1 作业程序根据插件传入的参数,做具体的业务处理。
由上可知,插件本质就是一个脚本程序(TASKCTL 的插件不仅限于 shell 脚本,也可以是 C 程序),它根据统一参数接口获取信息,并解析出具体的作业程序名称、作业参数以及相应的环境信息等,同时,根据这些信息运行相应的作业。
为什么说 TASKCTL 插件很简单
试想一下,如果给足够的信息,我们一定可以快速通过一个 shell 脚本运行一个具体的作业。而有了驱动插件程序,只需简单的配置,我们就可以使用指定的作业类型。
插件的核心——统一的接口,它是怎么描述各种作业的完整信息
插件程序的 6 个统一入口参数,以及与作业定义属性的一一对应关系
每一种作业类型的插件都会通过插件脚本传入 6 个参数。
通过对应关系,系统自动将作业定义的 progname、para、exppara、hostuser 四个属性,完整地传入相应的插件程序。
progname、para、exppara、hostuser 具体表达什么,具体格式规则是什么,这就是插件与 Designer 应用之间的约定。总之,插件按具体约定规则,通过这四个属性,可以解析出描述一个作业的完整信息,并且,插件可以根据这些完整的信息,运行具体的作业程序即可。
hostuser,是用于无代理执行的属性。如果该作业类型不提供无代理执行机制,该接口就不用;同时,在作业定义时,也不用定义 hostuser 属性。
作业日志统一获取接口
作业日志查看,是调度的重要的功能之一。
如果自己开发驱动插件,并自己定义一种相应的作业类型,要怎样处理,才可以在 taskctl 中查看作业的具体运行日志?
凡是通过插件运行的程序,只要是标屏显示的日志,TASKCTL 即可自动捕获。
如果你的具体作业程序未将日志标屏输出,那么,在插件中,就需尽最大的可能,获取日志,并将该信息输出到屏幕。否则,在 TASKCTL 中,就无法查看相关作业类型的作业运行日志。
插件脚本举例
在 TASKCTL 产品服务端,自身带了很多作业类型以及相应的插件驱动程序,我们只要简单分析一下这些驱动程序,即可理解。
在此,给大家推荐一下几个具有代表性作业驱动程序。
1 python 【python 作业类型】
插件路径:
2 ktrjob 【kettle 转换类型】
插件路径:
3 oraproc 【oracle 存储过程】
插件路径:
插件配置-定义作业类型
插件开发完后,需要部署插件、定义作业类型等操作
部署驱动插件
一般情况下,插件就是一个 shell 程序。编写完后,我们需要将插件程序部署到TASKCTL服务节点以及相应代理节点。
理论上,我们可以将插件部署到 TASKCTL 安装用户的任意目录。但为了管理方便,我们还是遵循 TASKCTL 的一些管理规范。TASKCTL 自身带了很多作业类型及其驱动插件,统一存放到 $TASKCTLDIR/src/plugin 下,并按每一种作业类型建立子目录存放。
配置作业类型
用 admin 用户登录桌面客户端 admin 组件, 进入以下界面即可配置。
关键定义项说明:
类型名程,为自己的作业类型改一个名称,比如:mysql 等。
驱动定义,执行方式选择 shell, 执行程序填写您插件程序部署的全路径。停止方式选 command(如果您自定义一个停止插件也可以)
高级定义,一般采用缺省即可。
保存完毕后,您重新打开 Designer,就可以看到您所添加的作业类型。
Designer 中使用新建作业类型 mysql
1 工具箱中出现新的作业类型 mysql
2 代码中可以输入 mysql 作业类型
3 流程图中出现 mysql 作业节点
产品地址:www.taskctl.com
评论