写在前面
前些日子,供职于移动的大学同学一直在向我抱怨:他们项目组有个搞数据的小伙子离职了。现在整理项目整得焦头烂额,特别是ETL调度这块,需要调整部分规则...... 我记得曾经听他说过,他们的项目用的是datastage,由于有一部分调度功能用datastage无法满足。于是他们就自己用java写了个调度处理程序在跑etl任务。当时,他还在夸这个程序很NB滴:又是分布式、又可能自定义规则,出了问题还可以把异常错误信息发短信到手机上....... 结果现在人跑了,代码实在难于维护.作为哥们,当时只能安慰安慰了他:“实在不行就只好重写一遍了,反正业务规则你还比较熟悉吧”......
这段时间,网上出了一款ETL调度工具的开源代码。第一时间down了下来,经过初步分析调度功能还比较完善:并行、条件分支、循环等等都有。文字不好表达,用表格:
功能点 | Control-M | TASKCTL | Datastage |
串行 | √ | √ | √ |
并行 | √ | √ | √ |
互斥 | -- | √ | -- |
定时调度 | √ | √ | -- |
业务计划调度 | √ | √ | -- |
条件分支 | -- | √ | √ |
循环 | -- | √ | -- |
容错处理 | √ | √ | √ |
断点续跑 | √ | √ | -- |
远程任务调度 | √ | √ | -- |
负载均衡 | √ | √ | -- |
自定义条件调度 | √ | √ | -- |
(本表格数据由《中美ETL调度工具PK》和自己用过的datastage整理得出)
接着又看了看开源文档,嗯...还不算太难懂。联想到哥们的项目,这不正是他所需要的吗!马上给他打了电话,问他项目开始了没有,得到的答案是“年底了不敢乱动,还没有开始”。对这个TASKCTL,哥们也比较感兴趣。这我就放心了,接下来开始进一步实施...... 好了,闲话不多说,直接介绍下怎么利用TASKCTL开源代码来打造免费的ETL调度解决方案吧。
具体步骤
一、思路及原理
不可否认,TASKCTL的亮点就是那个流程设计代码模式以及强大的流程图展示了,这也是它的卖点之一。可惜的是,目前免费版的服务核心在JOB支持数上会有限制,不利于大中型项目的实施应用。而学习版虽然提供了完整的桌面体验,却无法进行正式商用。重点来了!经过跟踪发现,TASKCTL专业版是在其后台服务核心组件上进行授权的来决定客户端是学习版或者企业版的。客户端(包含图形客户端)和开源版的服务核心组件并没有做任何限制!并且都支持与专业版同样的XML流程代码数据结构。也就是说,对于流程文件采用的是同一的API接口。因此思路也就明朗了:利用学习版来设计流程然后部署到开源版上去运行调度流程!
二、获取源码
TASKCTL开源代码是遵循LGPL开源协议发布,可以对源码进行修改再重新分发及商用,只要记住修改的部分必须也要遵循LGPL协议就可以了。你可以到各个主流的开源社区或TASKCTL官网进行获取:
开源中国:http://www.oschina.net/p/taskctl
SourceForge:http://sourceforge.net/projects/taskctl-source/?source=navbar
三、配置环境及编译
TASKCTL开源版是基于UNIX核心编写的C语言代码。理论上,可以在任意UNIX核心的操作系统上进行编译。下面只举例在linux RedHat环境下进行操作。
下面的内容摘取开源手册里面的信息:
环境搭建:
TASKCTL 只支持linux/Aix等unix系列,且不依赖数据库,代码全由标准c语言编写。
使
用前,我们必须对相关用户环境作如下设置:
1. 环境变量设置
编辑系统用户环境.profile文件(或.bash_profile), 增加以下环境变量
export TASKCTLDIR=[运行环境目录] #如export TASKCTLDIR=$HOME/taskctlos1.0/cir
export TASKSRCDIR=[源代码目录] #如export TASKSRCDIR=$HOME/taskctlos1.0/src
export PATH=$PATH:$TASKCTLDIR/bin:.
2. 修改核心参数(AIX环境无需修改)
进入超级用户编辑, 并在超级用户环境执行以下命令
a. echo 153600 > /proc/sys/kernel/msgmnb
说明: 该命令修改消息队列最大值大小
b. echo 128000000 > /proc/sys/kernel/shmmax
说明: 该命令修改共享内存最大值大小
编译前说明:首先您的环境必须有开发环境,即需具有cc或gcc编译器; 其次, 第二步环境搭建后,您必须重新登录环境,以便使之前修改的环境变量信息与核心参数信息生效。
具体编译方法如下:
1. 进入src目录
2. 执行命令: sh mkall [lix\aix]
说明:
(1) 例: sh mkall lix 表示在linux环境编译.
(2) 目前该包只支持32位redhat, aix环境使用。如果您需要用于其它环境,可能要对代码或相关make文件进行微调。
3.系统提示"编译完成!"
四、开始体验
场景一:你可以利用学习版的脱机运行机制 anytime anywhere 编写你的ETL流程代码,然后发布到开源版上去运行。
场景二:为客户演示项目流程图,跟同事私下一起学习流程,跟领导争执流程需求,离职后悄悄把流程带走.... :)
场景三:发布设计好的ETL流程文件到论坛,让安装了桌面客户端的热心网友们都来欣赏你的杰作,让高手来帮你参谋参谋。
五、二次开发
“TASKCTL开源版本身提供了较完整的ETL调度基础功能,也提供相对简明的API接口开发文档以及源码介绍文档等。足以满足一般的ETL调度需求。你可以根据自己项目的实际需求来增加或调整部分功能。” 具体源码的二次开发不在本帖所想要表述的范围之内,若有兴趣请直接访问官网。
最后
TASKCTL开源版是国内ETL工具软件中为数不多的开源项目,在ETL调度领域,目前它应该是唯一的。虽然我们通过重新编译开源核心,绕过了专业版的JOB支持数限制,结合学习版的桌面客户端,从而获得了专业版的体验。而且是完全免费的方案,也无须担心法律风险。不过本人还是希望大家能够支持国内的开源事业发展,支持www.taskctl.com。毕竟只有获得了双赢,才能持续给大家带来好处和更佳的体验,不是吗?