00:00
好,那一会儿呢,咱们接下来呀,要学习的这个东西呢,叫做什么呢?叫做阿兹卡班啊阿卡班首先说一下啊,这个阿兹卡班它是干什么用的,阿斯卡班,呃,或者说我们呃之前给大家提过,是不是还有一个叫做乌Z的东西啊,对吧,那像这种东西啊,他们官方都是怎么定义的呢?他们都是这样给自己定义的,都说自己叫什么呢?叫做工作流程。定时调度系统。啊,它那个如果是英文的话呢,有两个关键词,一个是work flow,一个是schedule啊,那work flow是啥意思啊,就是就是咱们所谓的工作流程啊,那scheduler呢是什么呀?就是定时调度,定时调度啊,Schedule不是那个,呃,定时的意思嘛,对吧?啊,它叫做工作流程定时调度系统啊,那定时这个概念呢,咱们大家应该都清楚,因为这个任务,咱们数仓的任务需要怎么做,每天是不是都要跑对不对,所以肯定是定时是必须的啊,那关键是这个工作流程咱们怎么理解什么叫做work flow。
01:04
啊,其实work flow呢,这个概念呢,呃还是比较这个,呃比较简单的啊,它基本上呢,有这样的两个特点,我们就可以称之为哎一个work flow啊什么样的特点呢?两个,第一个一个工作流程,它是不是肯定是由多个工作单元组成的呀?啊或者由多个工作节点组成啊,比如说这个。啊,那这就是一个工作流程吧,啊,是不是有多个工作节点呀,对不对,那再有还有一个特点,还有一个特点是什么呀,就是它一个工作流程,我多个工作节点呀,它是有前后的这个执行顺序要求的啊为什么呢?因为我两个节点,前后两个节点之间呢,是有这个依赖关系的,也就是说我必须得先把前面这个工作单元做完,我才能执行下一步。啊,能理解吧,不能跳着走啊,这是它的两个特点啊,那咱们举一个生活当中的例子啊,就举一个,咱们举一个,这个就是咱们平时自己做饭的一个例子吧,啊,我我反正是不会做啊,不知道有没有会做啊,就这样一个例子,你要想,比如说今天你想吃这个,想吃菜了,对吧,想吃西红柿炒鸡蛋啊,那你首先得干啥呀。
02:11
得先去准备食材对吧,比如说去超市你得买西红柿买鸡蛋对吧?啊,那买回来之后呢。啊,得洗一下啊,对吧,啊洗洗更健康啊得洗一下,那完之后呢,包完之后呢,不是吗?不洗不能吃对吧?啊完事呢,完事呢。嗯,就切呗,对吧,切,然后准备一下等等等等完了之后呢,是不是就可以炒了呀,那炒完之后呢,嗯,你就可看情况呗,要是如果说那个能吃就吃,吃不了就扔了,对吧?啊有这种条件对吧?这种条件啊好,那这就是一个什么东西啊,那这就是一个典型的工作流程,你看整个流程是不是有多个节点组成,而且是有强后的依赖关系的啊,你菜必须买回来你才能洗啊,必须洗了才能才能切对吧?啊是这样的一个顺序啊,这是当然是一个生物当中的例子啊,那我们现在要说的是什么呀。
03:04
是我们数仓当中的工作流程啊,那你说咱现在数仓里边的工作流程应该指的是什么呀。咱书房里的工作流程应该是啥呀?啊,其实就是从原始数据,从咱们比如说从买circleq也好,从也好,呃,从那个那个日志服务器也好,对不对,那到哪到最终的我们这个结果是不是这个从头到尾它就需要一个工作流程了,对不对啊,那所以说咱现在呢,先不去学家的卡班,这个不着急,很简单一会儿就能学会啊,咱现在干什么呢?先来看一看我们这个数仓里边的工作流程,它到底是一个什么样的东西啊来我们来看一下。啊,来画,咱们画一下呗,画图就行啊呃,我们刚才也说了,我们整个工作流程呢,要求得涉及到从头到尾对吧,那咱们就从头开始开始算啊,那时候我们从头开始算,你说哪些任务应该属于我们这个工作流程啊,啊就是所谓的工作流程,就是一会儿交,需要交给阿德卡班,需要每日定时跑的,对不对啊,哪些是属于这个流程的啊,哪些需要每日定时调度。
04:09
啊,咱们一个一个来啊,从头开始,从数据源开始,对吧?哎,Input,那我们的数据源,数据源呢,咱们有两个,一个是呃日志,一个是呃,那个业务数据啊,那我们的日志是怎么采集的呀。是用M采集的,哎,那你说咱们需要交给阿德卡文调度吗?需不需要?应该不需要吧,为什么,因为我们是一个啥呀,是一个进程。是不是一个进程啊,是不是你把那个启动,咱们现在虽然我们自己现在模拟模拟这个生产环境,我们那个数据呢,是用F导过去,然后咱们为了节省资源,是不是就把腐给停掉了呀,对吧?但实在生产环境下呢,是不是一直运行啊,啊那边只要生成我就实时采集,能理解吧,所以这个东西呢,我们是不需要调度的,那只需要把它启动之后,你让它一直运行,然后呢,那就完事了,所以它不需要调度,但是日业务数据那边呢,MYSO那边MY那边咱们是实时采集吗?
05:05
不是,我们是使用scoop是不是进行批量采集啊,对不对,那一采采一天的,那所以说他得怎么办,是不是每天都要执行,因为SCO的底层本质上就是一个MAP6次嘛,对不对,所以说一天提交一次,一天提交一次,那他是不是肯定需要调度啊,对不对,那所以说我们首先第一个任务啊,就是scoop那个脚本,那scoop那个脚本咱叫啥名来着,咱们就以名字命名吧。叫my circle to htfs吧,这是我们SCO那个脚本啊,来,你给他拿过来啊,放在这里。这是我们工作流程当中的第一个工作节点,然后呢,我们再往下翻啊好,那完了之后呢,下边呢,数据现在是不是已经到了HTFS了呀,到hfs之后是不是应该从HDFS往ods层导,那我们往ods层导的这个呃,脚本呢,咱们有俩,一个是把业务数据导到ods,一个是把日志导到ods,对吧,那我们分别叫做HDFS,然后呢,To ods啊,然后呢,DB,一个是DB。
06:07
一个DB一个log对吧,比如说这个呢,咱们先叫log来CTRLCCTRLV。先拿过来,那这个呢,我们管它叫做DB。好,这是这俩工作节点,好,那现在我们已经写了三个了啊,这每一个脚本是不是都是咱们整个流程当中的一个单元,对吧?一工单元,那问一下啊,这仨工作单元之间的依赖关系应该是什么样的?啊,有没有一赖关系,有没有首先说它他跟他们俩有关系吗?没有任何关系,但是他们俩之间是有关系的吧,对不对,那所以这个一赖关系咱们已经搞清楚了,我们画一个箭头ail来画箭头,那也就是它俩之间是有依赖关系的。好,那把这个箭头放在这儿行,那我们接着往下走啊,接着往下走,那这俩完之后呢,我们数据已经到了ods层了,对吧?到ods层之后是不是该往DWD走了呀?那DWD咱也是分着走的是吧?啊也是分着的,那咱们还分着往下来啊,那这边它叫做ods,然后呢,拖啊DWD,然后呢,是不是叫做DB对吧?那左边这个呢,应该叫做ods to dwd log。
07:20
啊,那是这样的,那他们之间的依赖关系应该是什么样的,应该比较清楚吧,是不是这个依赖于它左边那个呢,依赖于它上面那个。是不是应该是这样的一个依赖关系啊,对不对,到目前为止,其实这两条线完全没有关系,它俩是不是可以并行的走啊,对不对,可以并行的走啊,那这完之后呢,我们再接着往下走,该往DWS层导了,我们数据往DWS层导的时候呢,咱是不是就已经不再区分日志和业务了,我们就合并到一起了吧,对不对,那所以说呢,这块我们需要怎么做呀?来,往这走来一个DWD,然后呢,To DW s,没错吧,D WD to d ws啊,好,那它所依赖的任务应该是谁?
08:06
它是不是应该依赖于他们俩呀,对不对啊,因为往这一层打的时候,是不是须要用到这两门的表啊,那所以说我这个任务要想执行,那必须得等他们俩都完成之后,是不是才能执行啊,是这样的啊,那所以咱这边呢,需要有两个这个依赖关系,你需要给他拿过来。来这边放在这儿。那这个呢,我给它放到这儿。啊来。啊,这个没问题吧,啊,那到这一步之后呢,我们再接着往下走啊,那数据到了DWS了,还得往哪走,还得往DWT层走啊,我把这个箭头一块摘下来。来,那接下来就简单了啊,就单线的就DWS,然后呢,下划线to d wt啊,那到了DWT呢,我们该往哪倒了,该往ADS层导了吧,那接下来把这个往下拿,CTRLCCTRLV。那最后一个呢,就是DWT,然后呢出啊adx。啊,那这个流程是不是就从最开始的原始数据到了我们ADS层了呀?诶,这就是一个典型的工作流程啊,那当然这个工作流程目前啊,还不完整,还不完整,还差一步啊,还差哪一步呢?因为我们后续是不是需要对ADS层的结果做一个可视化的展示啊,对吧?那前面说了啊,咱们可视化展示我需要对接的是谁啊。
09:21
是不是应该是用咱们报表系统对接my circleq啊,对吧,对接关型数据库,因为对接have的话,可能延迟比较高,影响我展示的效果,对吧?那所以说我们最终需要怎么做,将ADS数据是不是还得导到my circleq里边啊,那所以这边呢,我们需要给它往下拉一下,这写什么,咱们随便起一个,比如说叫做HDFS啊,然后呢,To my circle啊,那这个脚本咱是不是还没写呀,对不对,没关系啊,这个等我们用的时候再写,那这个要想时间的话,咱们应该用用谁时间呀,Scoop没错啊,这咱们后续再做,那也是现在咱们大家看到的呢,就是一个我们数仓当中的一个完整的工作流程,当然呢,实际上一个真实的一个生产环境下,这个工作流程要比咱们这个复杂啊,主要复杂什么地方呢?咱们这儿啊,这个其杂复仓表挺多的,对吧,在整个节点,这个整个的工作流程比较简单,这是因为什么?是不是因为我们一个脚本当中就包含了好多张表啊。
10:16
你比如说这张表我就包含了20张,这一个脚本就包含了20张表,对不对,但实际上我们正常应该怎么做呀,是不是应该一一张表一个脚本,这样是比较合理的呀,这是比较合适的啊,啊或者说呃,你稍微拆开一点,比如三张表一个脚本啊,哎等等也是合理的,为什么?因为如果你不拆的话,你放在一个脚本里边,那我是不是这全是怎么执行的呀?全是串行的对吧,但其实他们有必要串行嘛,其实没必要的啊,因为同一层我基本是没有依赖关系的啊,好,这个大家把这一点能够想明白就行啊,好,那这就是我们这儿的这个所谓的工作流程啊,那下来啊,咱们这个工作流程我们明白了啊,那接下来咱们思考思考啊,就说我们为什么需要使用。
11:00
工作流程调度系统。啊,你为什么要用它。啊,为什么要用它,其实咱们得想一想,如果不用它,那我们的痛点是什么,对吧?啊,你要不用它,你哪比较难受啊。就是你提交任务的时候,你比较难受,对不对,怎么个难受法呢?你想一想啊,这个任务咱们都知道了,每天都要执行,离线入仓一天一次,对吧,这个都知道啊,那然后呢,你提交的时候得怎么办,是不是得从头开始,因为他们有依赖关系的嘛,得从头开始,那也是你需要是不是先把这个执行成功,执行成功之后呢,怎么办,得等着啥呀。得等啥,是不是得得等他完成之后,你才能提交下一个,他完成之后再提交下一个啊,依次类推对不对啊,每天你都去执行这个工作,而且这个任务一般都什么时候跑。半夜跑啊,对吧啊,那也就是说咱们还得安排一个人值夜班才行啊,是不是,那所以这个很显然是不合理的啊,那所以说我们就需要一个什么东西,需要一个工具啊,这个工具能干什么事呢?这工具呢,它能够识别我们这个工作流程,你把工作流程给他,那给他之后呢,它能判断出来你这个依赖关系,那完了之后呢,他就怎么做呀,它就能自动的帮你依次提交,先跑第一个。
12:16
他会监测这个任务,等这个任务完成之后怎么办才提交下一个。他完成之后才提交,诶下一个是不是依次往下类推呀,哎是这样的啊,那所以说呢,那这个工作流程,这个调度系统呢,对我们来说还是很有必要的啊,也是很有必要的啊。好呃,而且呢,这个工作流程一般情况下呢,它还会给我们提供一个这个定时调度的一个功能啊,定时的功能哎,以满足我们这个每天重复执行嘛,啊满足我们这个需求,那除此之外呢,其实这个工作流程调度系统呢。还都一般情况下还都有一个什么呀,可视化的功能啊,什么叫可视化呢?一会儿大家学习阿卡班的时候就会就会看到啊,它会有一个外部页面,这个外部页面呢,能够把你的工作流程给你展示出来。
13:02
然后呢,你当前执行到了什么程度,执行到了哪一步,它是能够显示出来的啊,成功的这个步骤呢,会变成绿色,正在执行的呢,哎,比如说是蓝色,失败了呢,失败的是红色,哎就是说你是不是能够清楚的看到你这个工作流程的执行进度啊,对吧?这也是比较不错的一个功能,那在除此之外呢,这种工作流程调度系统呢,一般还会给我们提供一个报警的功能。报警的功能啊,什么意思啊,那大家说我们这个任务是不是前从前到后是有依赖关系的,对吧?那假如说中间有一个失败的这个,比如说当时是没有资源了呀,或者说我这个S后写的有问题啊等等等等,不管是什么原因吧,他失败了,那他失败了你说下边能执行吗?不能执行吗?那肯定执行不了啊,因为下边是不是依赖于这个的呀,对吧?那所以说如果只要有某一个失败,是不是整个工作流程就会受影响,对不对,那所以说我我们得怎么办才好啊。你得及时解决才行,要不然明天我这儿等着用用,结果呢,你没算出来这一晚上对不对,那你就耽误我的这个使用了,那所以说应该提供一个报警的功能啊,哪个任务失败了,哎给咱们打电话也好,发邮件也好,发短信也好,哎各种途径吧,哎通知完之后呢,你得去干啥呀。
14:17
哎,对,你得起来半夜对吧,半夜起来你得去看一看哪出错了对不对,出错之后呢,你需要让它继续往下运行啊,是这样的啊,那所以说这个报警的功能也是比较重要的啊好,那这个我们把视频录一下啊,这就是我们这种,呃,所谓的工作流程这个概念,以及我们为什么要去使用这个工作流程啊,刚才又说了一下工作流程调度系统呢,哎,他给我们提供了什么样的功能啊,咱们先初步的认识一下就行啊。
我来说两句