文档章节

ETL作业调度工具TASKCTL的两个重大突破

 老衲大海
发布于 2017/08/14 11:12
字数 2830
阅读 185
收藏 3
点赞 1
评论 1

在传统设计理念下,流程图的可视化、作业流的定义设计功能,随着作业量增加,越来越难用,越来越不适用是一个难以避免的问题。就这两个问题,我给大家分享一下TASKCTL是如何转变思路、如何突破、如何带来一些更理想的效果。同时,我也希望通过此次分享,带来一些抛砖引玉的效果,希望业界更多同仁,就批量调度技术更多的问题,敢于突破,使整个批量调度技术变得更完善、更易用。

第一部分:两大问题的再分析

在传统理念下,流程图可视化与作业流程定义方式不适用这两大问题,并不是孤立的,它们之间是相互影响,并相互恶化的。它们问题的核心都来源于一个共同的设计理念。

(一)传统作业依赖关系组织方式是两大问题的共同根源

传统作业依赖需求表

以上表格是传统方式对作业信息依赖关系组织的基本形态,作业之间的依赖关系采用属性记录的方式(有些调度设计不是前依赖,而是采用子作业后依赖方式,但本质是一样的)。这种方式,每条作业信息记录都是独立平等的,其中依赖关系只是每个作业的一个属性。我们认为,这种基本信息组织理念,对于小规模的作业信息组织影响不大,但对于大规模作业信息组织,就会影响到流程图展示,作业设计方式的适用性问题。

(二)对作业设计方式的影响:对话框方式不如Excel方式

(1)对话框方式不如Excel方式的原因

首先,是对作业设计方式的影响。从信息组织的记录特征出发,我们很容易想到对话属性框的设计方式。通过每个属性框的输入,完成作业各种属性信息的定义。但当我们面临大量作业信息的编辑时,很快就会发现对话框还不如直接编辑Excel。在Excel中,无论对更多信息的查看、编辑、拷贝、粘贴,都比对话框方便得多。

也许,你会说,我用的不是对话框方式,而是图形拖拽方式设计,很直观的。但实际上,拖拽编辑的直观是表面现象,背后依然是繁琐的对话框方式。这也是很多专业的调度软件,在实际使用场景中,宁愿选择 Excel方式主要原因之一。使用拖拽,可能只有两种情况,一是新手,二是唯一的设计方式(比如ETL工具),你没有更良好的选择。

(2)Excel带来的新问题

如果我们只关注编辑管理效率,相比对话框方式,Excel显然得到很大提升。但Excel的作业设计方式,又带来以下两个难以避免的问题:

第一个问题:脱机方式,与系统不能实时互动。我们采用了excel方式,单从编辑的角度,是提高不少效率。但Excel毕竟是第三方软件,不能与你的系统实时互动,它不能真实理解你每个属性的含义,不能实时检验你的信息,比如重复性,合法性。这一切,可能只有在导入的时候才知道。这些需求需求,你可能说,我可以通过二次开发Excel完成。没错,你可以做到。但我只想说,早知如此,何必当初,你又何必在调度软件里费那么大的力气,设计相应的对话框作业定义功能呢?

第二个问题:作业关系梳理很麻烦。采用excel,由于是脱机的方式,在excel中,我们很难实时直观的知道作业之间的关系,这对于作业间的依赖关系设计、修改,都变得非常困难。

(3)如果Excel方式是好的选择,那我们就应该多点匠心,多点优化。

虽然Excel有以上两个问题,但客观上,它的编辑管理效率比单纯的对话框方式,要高出很多。既然这样,我们为什么不多点匠心,将excel平面表格的方式集成到调度软件当中,这至少会使用户体验度,得到大幅度的提升。

(三)对流程图可视化的影响:线条大量交叉、排版混乱使流程图缺失直观性

(1)关系的自由组织,客观上难以避免凌乱的关系

由于作业之间的依赖关系,采用属性定义的方式,使你可自由定义作业间的多个依赖关系,但随着作业数的增多,你就很难控制这些关系的实际形状。一张蜘蛛网似的关系图,可能就此诞生了。

(2)人工编辑图形,同样难以避免凌乱的关系线条

为了避免凌乱的线条,你可能会想到图形编辑方式。毕竟在图形的向导下,可避免一些复杂的线条。但随着作业数的增多,首先是编辑变得异常困难,其次是在增删改的过程当中,线条的重构,重新排版带来的工作量也是你难以想象。也许,你会想到自动排版,但这种没规则的关系,在作业数多的情况下,其效果可能比你想象的还要糟糕许多。

(四)两个问题相互影响,相互恶化

总之,在这种信息组织理念下,如果采用图形拖拽,对话框方式,也许会减少很多凌乱的线条,使关系变得清晰一些,但这种方式又带来巨大的编辑工作量。如果采用Excel方式以提高编辑工作效率,那一定会给你带来难以接受的关系图。这两种矛盾,在目前设计理念下,是难以协调的。

第二部分:TASKCTL的突破

在TASKCTL理念框架下,不论作业数多少,作业间的关系线条,始终是无交叉、清晰、直观的,而且还没有图形编辑的繁琐。在IDE环境下,设计再多的作业,也比Excel似的设计,更为快捷、更为高效。而TASKCTL这些突破性的变化,更为理想的效果,主要是因两大理念的转换所带来的。

(一)作业依赖关系组织理念突破

(1)从自由组织理念到结构化组织理念

传统作业间的关系信息组织是自由的,但在TASKCTL中是结构化的,通过串并组的方式组织作业之间的依赖并行关系。

一个传统表达方式:

传统作业流需求表

同样的关系在TASKCTL中的表达方式:

TASKCTL批量作业XML文件设计界面截图

(2)TASKCTL流程图本质上是一张有序无环图

TASKCTL采用这种串并组结构化组织,本质上就不可能具备交叉现象,是一张有序无环图。以下是一张TASKCTL流程图示例。

TASKCTL有序五环图作业流展示截图

(3)TASKCTL对有序无环图缺陷的弥补

对于有序无环图这种图形关系表达理念,在大数据领域比较普遍。无论是底层基于资源的任务调度逻辑,还是OOZIE(一款大数据领域的作业流调度工具)业务工作流调度逻辑,都是采用有序无环的关系表达理念。但同时,我们也要知道,这种逻辑管理组织理念,有一种缺陷,就是无法做到一些交叉关系表达。比如以下关系:

作业设计需求流图示意图

在有序无环图表达理念中,上图C到D的关系是无法表达的。不过在TASKCTL,这种关系特殊的处理,可以通过LEAN(强制依赖)以及事件方式进行相应处理。LEAN属性与传统方式理念是一样的,可自由组织依赖关系。只是在TASKCTL中,这种传统方式只是基于串行结构化依赖的一种补充。

在任何一门计算机语言当中,可能都有类似GOTO这样的语句,实现一些灵活的关系跳转。但我们都知道,为了增强信息的可管理型、可读性,尽量采用结构化语句编写,而GOTO,尽量避免。在TASKCTL中,LEAN就像GOTO一样,作业关系我们尽量用结构化串并组嵌套方式表达,而LEAN这种灵活的表达方式,还是少用为好。

(二)作业整体信息组织理念的突破

(1)从单纯记录信息到结构化,规则化的“代码”信息

在传统作业信息组织方式下,是以每个作业为一个独立的设计单位,而在TASKCTL中,是以一个结构或多个结构为设计单位;传统的焦点是每个作业个体,而TASKCTL更倾向于一个更大的整体。TASKCTL站在一个整体特征的角度,设计了相应的规则,并以XML格式进行表达。实际上,TASKCTL的设计信息更像具有一定语法规则的代码,并引入了很多代码语法理念,比如if语句、各种函数、属性继承、重载以及自由注释等。

TASKCTL作业批量开发XML代码截图

(2)从配置理念到开发理念

传统作业信息组织是记录式表达,而TASKCTL是用具有一定语法规则的结构化代码来表达。记录采用配置概念,而代码显然采用开发概念。传统为了方便记录的配置,设计了相应的对话框;而TASKCTL,为了方便文本代码的开发,设计了相应的IDE环境。

传统方式,之所以更愿意选择Excel对更多记录的配置,其核心原因是Excel是一个平面文件。相比一个个对话框,平面文件更便于信息浏览、查看、编辑。而TASKCTL信息本身就采用格式代码的方式,本身就是一个平面文件。IDE设计的目的,只是为了更好的管理、设计开发TASKCTL的代码文件。

如果站在另一个纬度,传统Excel方式配置和TASKCTL代码方式开发,都是为了产出一个有规则的文件的话,一个是采用普通文件编辑器编辑,而另一个是采用针对这种规则设计的特殊编辑器(IDE)进行编辑。

TASKCTL作业设计IDE截图

我们知道,JAVA程序的设计,是可以直接通过简单的记事本来完成,但我们还是要采用更强大的eclipes进行开发设计,中间的差距,不言而喻。

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 20
码字总数 13635
作品 0
石家庄
加载中

评论(1)

e
emslkl123
学习学习
ETL调度技术平台--TASKCTL

ETL的技术本质是:通过调度管理控制一系列具有数据处理功能的各种程序有序地运行。因此,有人总结:“ETL是BI(商业智能)的基础,调度是ETL的灵魂”。从功能层面讲,调度是ETL技术体系的重要...

施鹏飞 ⋅ 2013/01/26 ⋅ 14

说说ETL调度工具TASKCTL的五宗最

这段时间,我一边研究网上公开的调度工具TASKCTL,一边看大鹏嘚吧嘚,一边是惊喜,一边是欢乐。大鹏嘚吧嘚有五宗最,很八卦,让我也给TASKCTL凑五宗罪,这绝对值得我们ETL技术人员学习与思索...

捷宝大大 ⋅ 2013/04/05 ⋅ 2

Kettle 的 Web 端管理工具--Kettle-Manager

平台简介 出发点 专门为kettle这款优秀的ETL工具开发的web端管理工具。 kettle作为非常优秀的开源ETL工具得到了非常广泛的使用,一般的使用的都是使用客户端操作管理,但问题是当投入生产环境...

马进举 ⋅ 2016/11/23 ⋅ 5

HIVE 有ETL 工具吗

在实际场景中需要把关系数据库的数据导入hive中,可是我翻看了所有的hive的文档都没有找到关于hive 的ETL 工具。不知道诸位同仁在实际应用中如何用hive做ETL的,可否分享一下。 是否需要将交...

leowei ⋅ 2012/12/11 ⋅ 2

HAWQ取代传统数仓实践(五)——自动调度工作流(Oozie、Falcon)

一旦数据仓库开始使用,就需要不断从源系统给数据仓库提供新数据。为了确保数据流的稳定,需要使用所在平台上可用的任务调度器来调度ETL定期执行。调度模块是ETL系统必不可少的组成部分,它不...

wzy0623 ⋅ 2017/05/18 ⋅ 0

基于 J2EE 的调度系统 - HelloJob

Hello Job 调度系统 hello job 是使用j2ee技术开发的调度系统,提供交互简单的中文操作界面,40秒上手。目前业界有不少调度系统,比如oozie(太难用)、xxl-job(太重量)、airflow(python写...

iture ⋅ 05/20 ⋅ 0

YARN或将成为Hadoop新发力点

Yahoo!最初开发Hadoop,是为了用于搜索和索引Web网页,目前很多的搜索服务都是基于这个框架的,但是Hadoop从本质上来说还只是一个解决方案。2013年的Hadoop峰会上,YARN是一个热点话题。三年...

find_door ⋅ 2013/12/23 ⋅ 0

作业调度框架 Quartz.NET 3.0 正式发布, 支持 .NET Core

Quartz.NET是一个强大、开源、轻量的作业调度框架,你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。 在201...

局长 ⋅ 01/14 ⋅ 0

Elastic-Job 2.1.0 里程碑发布 Cloud Native

Elastic-Job 2.1.0 里程碑发布了。Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。主要功能: 单服务器可运行任意多相同作业实例,...

亮_dangdang ⋅ 2017/04/10 ⋅ 3

唯品会大数据平台优化

作者:蔡永承 大数据平台在唯品会近几年有了飞速发展,已经完成了从0到1的过程,各个部门逐渐将其引入到实际业务中。 “百尺竿头,更进一步”,在业务压力和集群负载同步增加的情况下,如何实...

小数点 ⋅ 2017/12/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android JNI 读写Bitmap的方法

Java层创建Bitmap,通过JNI将Bitmap传到C/C++进行处理 Java部分 public static native boolean greenBitmap(Bitmap bitmap); C/C++部分 JNIEXPORT jboolean JNICALL Java_com_test_Test_gree......

国仔饼 ⋅ 11分钟前 ⋅ 0

一次性让你懂async/await,解决回调地狱

什么是async? 欢迎留言讨论 async 函数是 Generator 函数的语法糖。使用 关键字 async 来表示,在函数内部使用 await 来表示异步。相较于 Generator,async 函数的改进在于下面四点: 内置执...

阿K1225 ⋅ 11分钟前 ⋅ 0

angular常用命令

.下载更新操作 1.利用npm下载angular的命令行工具AngularCLI: npm install -g @angular/cli 2.下载jquery: npm install --save jquery 3.更新npm: npm i -g npm 4.更新angular: ng update ......

消散了的诗意 ⋅ 13分钟前 ⋅ 0

window.print 页面打印

定义和用法 print() 方法用于打印当前窗口的内容。 语法 window.print(); window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型...

初学者的优化 ⋅ 14分钟前 ⋅ 0

魔兽世界 7.0版本上 PVE装备全攻略

  T套 因为大家应该都会打穿副本的所以具体是哪个boss我就不说了。   T1: 所有套装都在【熔火之心】出   T2: 头原来是在【奥妮克希亚的巢穴】改到黑翼之巢的奈法利安了,腿是在【熔火之...

wangchen1999 ⋅ 14分钟前 ⋅ 0

java.math.BigDecimal使用小结

原文地址 java.math.BigDecimal使用小结 divide方法 使用BigDecimal.divide方法时一定要考虑: 除数是否为0 商是否是无限小数 正确的使用方式 判断除数是否为0,是0做另外的处理逻辑 调用除法...

666B ⋅ 17分钟前 ⋅ 0

关于qstring转char乱码问题。

if (OpenClipboard(NULL)) { HGLOBAL hgClip; EmptyClipboard(); QByteArray byay = FValue.toLocal8Bit(); //转latin编码 char *bochsrc_line = byay.data(); hgClip = GlobalAlloc(GMEM_DD......

backtrackx ⋅ 17分钟前 ⋅ 0

了解SSH加密和连接过程

介绍 SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份验证,以及来回传递命令和...

吴伟祥 ⋅ 24分钟前 ⋅ 0

微信小程序

小程序的基础配置:导航栏和tabbar 在app.json文件中配置导航栏和tabrbar 导航栏的设置 设置导航,背景黑色,文字白色,文字内容 { "pages":[ "pages/index/index", "pages/logs/l...

上官清偌 ⋅ 27分钟前 ⋅ 0

【转】百度坐标坐标系之间的转换(JS版代码)

/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 *///定义一些常量var x_PI = 3.1415926535897932...

HAVENT ⋅ 29分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部