00:00
嗯,来吧同学,那咱接下来呢继续往下进行,那下边呢,我们就要做的工作应该是啥呢?是不是就得去干啥。这得干啥了,是不是就得去,呃这个使用咱们的普通用户登录对不对,使用普通用户登录完了之后呢,是不是去学习如何定义工作流,如何去这个提交工作流量,对吧?好,那接下来呢,咱们先做一个操作,就是切换用户,那在这呢,我先把这个当前的管理用户退出之后呢,再用刚刚的是不是,呃爱酷用户登录啊,对吧?来,我现在登录一下。好了,那现在我已经用艾特硅谷这个普通用户的身份登录进来了,然后登录进来之后,你看这个页面跟刚才相比有啥变化。安全中心没了吧,没没没错吧,也就是安全中心里边的内容只有谁能碰,只有管理员用户是能碰的,对普通用户他有权限了,他没权限,普通用户你只能老老实实的去定义你的这个工作流,去提交工作流,别的你干不了啊,这个理解一下啊,现在接下来咱继续往下走,那首先我们要做的工作应该是什么呢?啊,我们要想去定义工作流对不对,要想去提交一个工流,首先你得先有一个啥,先有一个项目,哎,也是得有一个project才行,那所以咱接下来要做的就是这个所谓的项目管理,OK,那项目管理现在目前进来是不是啥都没有啊对吧?那这时候我们需要先去创建一个项目,那此处呢,我们必填的只有一个名称,比如说我就给他传一个JA贸这样的一个诶名称,然后点击提交好了,那到现在呢,咱这个项目是不是就已经创建好呀,对吧?创建好之后呢,你看啊,这个项目它是不是有一个所属的用户啊,对吧,那你当前用户创建的你的用户所所属用户就是谁的,就是爱特硅谷对吧?是这样的啊啊,那也就只有爱特硅谷有对这个项目的一些相关的权限,别的用户他是访问不了你的这个项目的啊,这个理解一下啊,好,那就来继续往下走,那后边还有什么什么工作流定义数,正在运行的流程数,这里边是不是都是零啊对吧?OK,那我我们要想到不是零是不是得自己去干啥呀,得去定义工作流,得去跑工作流才行,对吧?那怎么去定义工作日,去跑工作流程,很简单,我们现在需要先。
01:59
点进去这个项目点点进来之后呢,我们就来到了哪儿啊,就来到了这个工作流的定义和提交的界面了,哎,咱就来到这儿了啊好大家注意观察一下,那在左侧这个位置,我们是不是一共有这样的三个,哎,这个选项啊,对吧?这三个选项分别是什么。
02:18
这个非常重要,第一个就是工作流定义,第二个是什么呢?工作流实力,那第三一个是什么呢。任务实力任务实例,OK,好,那这个工作流定义里边,它保存的应该是什么呢?你可以猜一猜工作流定义保存的是什么?这里面放的是什么?这里边放的又是什么?这里边都应该是啥东西?很简单,工作流定义里边,它保存的应当就是什么?就是我们定义出来的一个一个的工作流对不对?那所谓的定义一个工作流,你说我们要定义哪些东西,很简单,就是你这个工作流它里边有哪些任务节点对不对?那每个工作流之间,它的每每个这个任务节点之间,它的依赖关系是什么?这是不是就是我们定义工作流的时候,咱们要定义的内容啊,对吧?这叫工作流定义,那我一下大一下,你说工作流定义,我定义好之后,它一定会执行吗?
03:12
不一定会执行,你得让他跑,他是不是才会去执行啊,对吧?OK啊好,那工作流定义只有我们定义的这个,相对于一些原数据信息啊,是这样的啊好,谁的元数据信息呢?其实就是这个工作流的一些元数据信息呗,对吧?啊就是有哪些节点接待的依赖关系是什么,对不对等等啊就是这些东西啊好,这是工作流定义里边保存的内容,好,那接着往下走,这个工作流实例里边保存的是什么呢?工作流实力,大家想你就保存那个市场,哎,其实很简单,给大家解释一下啊,所谓的工作流实力保存是这个东西啊,就是我工作流是不是在这儿我会定义出来一个一个工作流啊,对吧,那工作流是不是咱们将来得执行工作流,每执行一次都会生成一个工作流实例。哎,是这样的啊,相当于这里边保存的,说白了就是啥呀,就是说白了就是工作流的一些执行的记录吧,没问题吧,我这个工作流每执行一遍,是不是在这儿就会有一个工作流实力产生,每执行一遍是不是就会产生一个工作流实例啊,对吧?就这个意思啊,好,那你想想在这里边咱们将来能有啥用。
04:14
那边有啥用,你在工作流室里边能看到什么东西?嗯,能有啥东西,是不是能看到一些,比如说工作流的历史的及执行记录啊,对吧?比如说比如我想看一看之前的这个工作流执行的情况,对不对,我是不是在这儿能够找到相应的记录,对吧?这是有用的啊好起来往下走,下一个任务实例,那这又是啥东西呢?哎,任务这个特殊的概念大家还记得吧?在呃,DS里边什么叫做任务来着,一个工作流对吧?它里边的一个节点是不是称之为一个任务啊,对吧?好,那这个任务实力指的是什么呢?很简单,假如说我这呢,有一个这样的工作流,这工作流呢,我里边一共有四个节点组成,四个节点组成啊好,那完事,我定义好,我现在给它执行一遍,执行一遍是不是正常会生成一个工作流实例啊,对吧?好,那生成几个任务实例,四个任务实例啊,是这样的啊OK,好,那任务实例里边咱们能够看什么东西。
05:07
是不是能看一些任务的执行日志啊,对吧,比如我举个例子啊,假如说我这个工作流,比如说跑的时候第二个失败了,失败了之后,那我要想看一下这个失败的这个节点的日志,我去哪看呢?是不是得找任务实例啊,对吧,找到你失败的那个节点所对应的任务实例,是不是打开去找里边的日志啊,对吧,就是这个意思,OK,好,那这就是任务实例,好,到目前为止呢,工作流还有这个工作流定义,工作流实例还有任务实例,这三个概念咱们就应该清楚了,文档当中其实也有相应的文字说明啊,在这呢。在这呢,哎,你这个应该是在哪呢?应该是在这个位置呢,啊OK啊,这有相应的文字说明这个呢大家呃,要是不清楚的话呢,再把这几几句话自己好好读一下就行了,我就不在大家读了啊,就是我刚才所说的那个意思,也就是这仨概念非常重要,必须得搞清楚,行了,那这个玩意儿之后视频我停一下。嗯,来吧,各位同学,那咱接下来呢就继续往下进行,那下边呢,我们就来看一看到底如何使用DS去调度咱们的工作流,那其实前面讲过就是这种所谓的调度工具啊,他们的使用逻辑是不是都是类似的呀,对吧?咱们大致分为两步,第一步是干啥来着,是定义咱们的工作流,第二步是干啥来着?
06:15
配置定时对不对啊,是这样的啊,那咱现在要做的第一件事不应该就是定义这个工作流。对不对,那怎么去定义这个工作流,首先找到工作流定义呗,对吧,然后大家去观察,你看这有啥,是不是有创建工作流,导入工作流啊,对吧?那我们现在其实只能是创建了,咱们能导入吗?导入不了啊,你得先干啥才能导入呢?你得先创建出来,然后导出,哎,它会导出一个阶层文件,导出之后你再把监测文件导回来,这才能导入,对吧?我们现在第一工作流对吧,是不是只能创建对吧?来,咱们先创建一个工作流。好,创建工作流,你点完之后就来到了这个工作流的编辑界面了,你看一下这其实就用来干什么的,就用来画图的设备了,对不对,OK,那给大家简单介绍一下这个布局啊,左边这一栏列出来的是什么呢?
07:02
对,就是dolphin sc所支持的任务类型啊,那这里边分别有啥呢?咱们简单的看一看,挑几个比较重要的看一下,首先第一个这就什么类行shell对吧?比如说你要想调一个shell类型的这个任务,OK,你怎么做就行,直接点,然后呢,往这边一拖,OK,然后里边是不是就能加上一些,呃,这个配置参数来了对吧?啊就这么个逻辑,这里边要配啥,咱们一会儿再看啊,好,那玩意还有啥呢?往下走,咱们看一下这个,这是什么呢?是procedure对吧?啥意思呢?是存储过程啊,际上have当中咱们有存储过程这个概念吗?是没有的,但是买serve和一些关系数据库是有存储过程的,对吧?啊,是这样的,什么叫存储过程呢?其实很简单,说白了就是,呃,用circle语句,再加上一些这种逻辑控制语句,比如说for循环呀啊,或者一些分支的一些语句,对吧,比如说衣服啊等等的,诶那些东西你干啥呢?是不是组成一段小代码,相当于对不对?这就所谓的存储过程,这个咱们了解一下就行,那have里边没有这个概念啊,那接量往下走,那这是啥呢?是不是可以跑一个一个circle啊,对吧?那这个是啥呢?Spark的任务,这个是Li的任务,这是MAP6,这是Python,这是发送,呃,这个当然不是发送的,这是一个依赖节点啊,这个不是一个单纯的任务类型,这个后续再说啊,然后往下走,这是一个什么东西?HTTP是不是用来发HTTP请求的呀?对吧?Get请求,Po请求等等等等,然后往下走,这是啥呢?Data叉是不是也能直接调data叉的任务对不对?当然呢,其实咱们现在不管是MR还是什么have,还是circle,还是什么data叉,咱们其实都把它封装到一个什么里边shell脚本,所以我们调的时候其实主要就是谁主要she就完事了,然后下边还有scoop等等等等,是这样的,好了,那这就是它所支持的任务类型,这个还是非常丰富的啊。
08:40
好,那接下来咱继续往下走,那下边呢,我们看右边这块,右边其实就是我们去定义那个工作流的这个界面了,对吧?然后这边还有什么呢?还有一些选中的,诶还有什么呀,这这是什么东西,诶,这是那个箭头,箭头其主要用来干啥的,是不是声明依赖关系的对吧?然后还是删除的按钮等等啊就这些东西好了,那现在呢,我们就呃来看一看我们到底怎样用它去定一个咱们想要的工作流,那首先咱们得先有一个任务才行,对吧?来我们看一下我们当前的一个任务是什么,看文档,那咱们这儿呢,有一个这样的要求啊,他说我们需要去定义一个包含三个shell类型的任务的一个节,这这这样一个工作流,注意啊,这个工作流一共有三个shell类型的任务节点,那分别是ABC对不对?那他们之间的依赖关系是什么样的呢?
09:26
是那种啊,对吧,这个应该能看明白,对吧?AB是没有依赖关系的,但是C是不是同时依赖于A和B啊,对吧,这个任务执行的时候呢,我们必须得保证AB先完成,完了之后是不是才能执行C呀,对吧?啊是这样的啊好,那完了之后这样的工作流我用DS怎么去表达呢?其实很简单,那首先我们需要先干啥,是不是先拖一个是要节点进来对不对,进来之后呢,那注意观察里边是不是有一些必要的参数需要去配置啊,对吧?然后在这儿呢,我先简单给大家介绍一下啊,首先第一个节点名称,是不是就给它一个节点起个名字啊,对吧,很简单,比如说在这儿呢,我就叫啥,我就叫note,然后A没啥问题吧,好继续往下走,那下边这儿有一个什么,有一个运行的标志。
10:07
啊,运标这俩俩一个是正常,一个是禁止执行,那这个是什么意思呢?啊,就是假如说我现在定义的一个工作流对吧?然后呢,这个节点我给它设为禁止执行了,那我在跑这个工作流的时候,这个节点它走吗?他不走直接跳过了啊是这样的啊,就是假如说你这个工作流对吧,我将来定义好了,然后呢,其中有某一个节点我暂时不想让它执行了,那什么情况可以出现这种情况呢?比如说我这个节点我已经手动的执行完成了,我就想给它跳一下对不对,那你是不是就可以通过这个选项给他跳过呀,对吧?是这样的比较灵活,但是一般这个就是正常就完事了,OK,好,接下来继续往走,描述我就不说了啊,然后往下走,这有一个什么任务的优先级对不对?OK,那这个任务优先级什么时候会有用呢?优先级,优先级是不是肯定是当资源不足的时候,它才会起到作用,如果我资源都很充足,对吧?我还跟还还需要考虑这个优先级的问题吗?是吧,那资源不充足才考虑优先级啊,对吧?好,那他这这个任务优先级的资源值是哪儿的资源呢?
11:07
资源对不对,你刚才不说了吗?是资源不足优先级才有用对不对?这个资源只是哪儿的资源不足的时候,这个优先级才会起到作用。节点什么节点是worker节点资源不足的时候才会,对,是影响到这个优优先级才会有作用,啥意思啊,你想一下,就你这个节点将来肯定是在什么上面跑的,肯定是在一个worker上跑的,对吧?假如我现在worker资源很紧张,对不对?那完了之后呢,我现在假如只能跑一个这个task,只能跑一个这个任务节点了,那OK,谁的优先级高,咱是不是就跑谁呀,对吧,这个理解就行了,好,那当前的是medium是中间的一个先级,好,这个完之后我们往下看,这是不是就是选那个worker分组的呀,对吧?那现在咱们能选的只有一个default组,那你选default组就意味着什么呢?将来你这个节点任务可能会在这三台worker里边的任意一个去执行,对吧?哎,这个理解一下,因为worker也是去中心化的,对吧。
12:00
没没问题吧,也是随机的对不对,这个理解一下,好继续往下看,那下边这儿呢,主要是跟什么相关的呢?是跟失外重试相关的配置,这里边俩参数,一个是失败重试的次数,一个是失败重试的时间间隔,那这个其实很简单对吧?好,那我问一下大家,这个失败重试在什么场景下是有用的呢?什么时候会有用失败重试,就是肯定它挂了之后,它自动重置可能会有点用,对吧,但是我挂的原因是不是会有非常多的原因,就比如说我代码写错了对不对,那你代码写错了,你重试能解决吗?解决不了你跑100遍它也解决不了对不对,是这样的,那什么样的这个错误失败重试是能够解决的呢?哎,对,就是比如说有资源不足所导致的一些问题,那我是不是诶室外重试有些情况下就能给咱们解决呀,那为啥比如说我现在就跑这个任务,然后恰好就是现在我集群资源非常紧张对吧,然后我申请不到资源,我这个是不是spaug就超时失败了,对吧?然后其实这个资源的问题,我稍微的等一会儿,我等其他任务跑完,把资源释放了,我再跑是不是就能成功对吧?所以说失败重试它是能够解决一些这种由资源不足所导致的临时性问题的啊,但是如果说你代码写的有问题,你这个重试就没用了啊,这个一般咱们是需要去配置一下的,比如说我让他失败重试三次对吧,那么让他失败的重置线间隔呢,你可以给他随意的设置啊这个。
13:20
大家理解就行了啊,我这就暂时不设了,好接着往下走,这还有一个参数叫做什么超时告警。哎,这个超时告警它有什么样的作用呢?哎,大家来试想一下啊,你说有没有可能会有这样的一个情况,比如说我有一个工作流,我这个工作流呢,我中间有一个任务对不对?他跑的时候呢,假如说出现了数据倾斜,对吧,我跑了五个小时都没跑完,他报错吗?也不报错对不对,但是呢,他就是跑完对不对,那我后边的任务能跑吗?是不是也跑不了对吧?那这样一来,我到了第二天上班的时候,我发现这个任务是不是仍然是没跑完呀,对吧?那这样的现象我们允许他出现了,应该尽量的不允许他出现才行,对吧?那所以说我们通常需要给每个任务都设置一个什么呢?超时告警,假如说你这个任务跑了一个小时还没完成,对不对,就是即便你不报错,那我是不是也得赶紧看一看,是不是出啥问题了呀,对吧,是不是出现了数据倾斜对吧?哎,OK,那这就是超时告警,它的意义那在这儿呢?我们应该怎么去调整它,你可以点一下,点完之后你就发现它这个告警有两种策略啊,一种是超时告警,一种是什么。
14:23
超时失败就啥意思,超时告警就是说我到了超时了,比如说我设定的超时时间是30分钟对吧,30分钟了如果没完成我就干啥,我就报个警,但是我这个任务接着跑不跑呢?跑对不对,那么是超时失败呢?就是到点直接就给你kill掉啊,是这样的啊,这是大家需要注意的,这就是所谓的超时告警,它的一个作用,它在实际的生产环境当中也是有很重要的意义的啊实际样的,你不能说我一个人我我跑五个小时耽误后边的这个跑不了了,对吧,那肯定是不允许,那它也是很有用的,诶这是超时告警啊好再往下走,那下边这就简单了,这其实才是咱们整个这个节点配置的核心内容吧,对不对,你你是你是一个什么类型的任务,是一个下LL类型的任务,Shell类型,你要最终要执行的,其实有一个shell命令吧,对吧,OK,在这儿呢,你是可以写上你要执行的shell命令的,比如说在这儿呢,我就想执行一个E对吧,AAAOK,好,那你在这呢,直接填就完事了,想填啥在这填啥就行,那当然下边语完成,这有一个什么东西。
15:19
资源,这个资源其实指的就是什么资源?就是我们那个资源中心里边放的文件,对吧,比如说举一个例子,我这儿要执行的这个善用命令是一个什么呢。比如说是一个这样的名字,叫啥名字,比如说是一个Java杠,这。就是加号杠杠,你是不是得引用一个炸包才行,没问题吧,你炸包在哪放着呢?诶你这时候就可以引用资源中心里边的炸包,能理解吧?哎,或者说在这儿呢,我要执行的是一个BA后边加一个脚本,你这个脚本在哪引用呢?是不是也是可以在资源中心里边放着,然后在这儿引用啊,对吧?哎,就是这么用的这个资源中心啊,这个理解一下,当然我们资源中心呢,还没用,啥都没有在然呢,我就执行一个简单的命令,叫做E口AA就完事了,好了,那资源里边啥都没有就不选了,然后再往下这儿可以传什么东西,传参数,你是可以给我们这个任务传参的这种工作流,咱们是不是通常每一天至少要给他传一个日期参数啊,对吧?啊是这样的啊,OK,那同学在这呢,你是可以往里面传参的,传餐怎么传这个后续再给大家说啊好,那这就是咱们这个节点的核心配置啊好,OK,那配完之后我点击一下这个确认添加好了,那现在咱是不是就有一个所谓的node a的呀,对吧?好,那我需要按照同样的方式,是不是再拖两个节点过来,才能组成刚才咱们这个工作流啊,对吧?好,那在这儿呢,我快速的写一下啊,这个我叫做node,然后B对吧,那这个下边其实不用填,我就来一个依靠bbb,那就完事了,然后点击确认添加,那我再往这边来,那再来一个啥就行了,再来一个note c对吧,Node note,然后杠大C,然后里边呢,我就来一个E口CCC,然后点。
16:49
的确是添加好了,三个节点都声明好了,但是我们这个依赖关系是不是还没有生明对吧?依赖关系怎么生明很简单,是不是要有箭头啊,对吧,你就点一下这个箭头就完事了,点它一下之后呢,注意这是不是就有点了,你这时候就可以根据你自己的任务的依赖关系去连这个线了啊,A是不是跟它是这样的一个依赖关系,B跟它是不是也是一个这样的依赖关系啊对吧?好,那这样一来,那我们这个就算是定义好了,哎,非常简单啊,好,完成之后大家稍微的注意一下。
17:16
比如说我现在这个依赖关系我弄错了,我想改一下对吧,比如说这个依赖关系我不想要了,那这个东西怎么删呢?很简单,你先点一下它这个箭头,这个箭头啊,鼠标类似鼠标这种箭头啊,点一下,点完之后呢,你在这儿就能选中这个东西了,选完之后你再点谁。再点删除它就删除了啊,就是这样了啊,要想加的话呢,你再给他拿过来,再给他往这边拖一下,就算是加上了这个定义就非常方便了,可能大家之前没用过其他的调度工具,你要用到其他的调度工具之后呢,你再用这个,你会觉得这个确实要方便多了,因为其他的你去定义这个工作的时候,你需要写一大堆的乱七八糟的配置文件啊,是比较麻烦的啊,好了,那这个确实比较方便,好那这块都定义完了之后,接下来咱们需要点什么。点保存对吧,好点点保存之后呢,这里边儿我们需要填入一些这个必要的参数啊,首先第一个这是啥。
18:03
名称嘛,对吧,比如说我就叫做helo hello world对吧,好,完成之后下边描述就不行了,然后重重点看这。这是啥选择租户对不对啊,OK,那这个租户其实就是干啥,是不是将来真正的去跑这些节点的这个任务的时候所使的那个身份啊,对吧?OK,那我这就选爱特硅谷好再往下走,这儿有一个什么呢?也有一个超时告警,这个超时告警跟刚才那个超时告警有啥区别?对,那是针对一个任务的,是针对一个节点的,对吧?那这个是针对于什么?是针对于整个dag,整个整流的,对吧?哎,这个要注意啊,好,那在这我就不配了,然后下边还有一个设置全局,这个全局在这指的是什么呢?指的是全局的参数,OK啊好,那这个全局参数指的是什么?我暂时先不说,后边咱们会有一节单独的讲这个传餐的事,好了,那也是在这儿我必须要填的是不是就是这个名称,还有这个租户选下就行了,对吧?别的咱们就不管了,我点击一下添加好了,那现在呢,咱们这个工作流是不是就定义好了呀,对吧?注意仅仅是定义好了,它现在执行了吗?没有,你要执行了之后,下面这是会出现实例啊,对吧,还没执行,那怎么执行?下节课再说啊,先休息会儿吧,同学们。
19:12
好,同学们,那现在我们再来看一下这个工作流定义完之后到底如何执行啊,好,那首先定义完之后,它是不是会在这个工作流定义里边出现一条这样的记录啊,对吧?OK啊好,那完之后我们继续往下走,假如说这个工作流呢,我定义完之后我再想去改,那怎么改呢?很简单,这是不是有一个编辑啊,对吧?哎,你再去调整就完事了,这个是能改的啊啊那现在我们肯定就不改了,我们就看看他怎么执行,实际上执行的按钮是谁。是这俩这个你看这叫什么,叫做运行对吧,然后呢,我再指后边这个,这个叫什么。叫定时,一个叫运行,一个叫定时啊给大家解释一下,什么叫做运行,什么叫做定时啊,运行很简单,运行就是说你点那个按钮一次,那我这个工作流它是怎么执行,立即执行,而且只执行几次呢?执行一次就完事了,这叫运行啊,OK,好,那后边这个定时什么意思呢?很简单,那就是说你需要配置一个定时的规则,那将来呢,它是是不是到点之后在周期性的运行啊对吧?哎,这是运行和定时的一个区别,诶给大,但是呢,应该能发现这俩按钮咱们在现暂现暂时是不是都点不了啊,对吧?这个为什么点不了呢?对,因为你看它现在的状态是什么状态呢?是下线的状态,OK,在下线的这个状态下呢,我们是不能去运行这个工作流的,你要想让它运行,这得怎么办呢?
20:31
就得点击上线,你看啊,这是不是有一个上线的按钮,对吧,你看在我点完这个上线的按钮之后,那咱这个前面的按钮是不是发生了变化,运行和定时现在能点了,但是谁点不了了。编辑这个按钮是不是点不了了,对吧?OK啊好,那其实它这个上限下限,它这个作用是什么呢?其实就是为了避免一些这种情况,什么情况呢?比如说我这个工作流站在现在正跑着呢,结果有人过来了,直接把我这个工作流给我改了,那这样一来是不是容易出现错乱呀,对吧?所以在这儿呢,它会有一个上限下限的一个功能,那当然你这个运行完之后要想再修改,你得先下线时候才能进行修改,对吧?这个一定要注意啊好,那现在我们点击上线,呃,这时候呢,我们两种一个是运行,一个是定时,我们现在先把这个运行跑一下啊,看我现在点击运行走。
21:15
点型之后,你看这里边我们是不是需要去配置一些这个启动的这个参数啊,对吧,那这里边都有啥,咱们逐步看一下,先看第一个,第一个是什么失败策略对吧?两种,一个叫做继续,一个叫做结束,对吧?其实在这儿写的他他写的不是很明确啊,这个失败策略写不明所以对吧,不知道是啥意思对吧?在这给大家解释一下啊,这个所谓的失败策略指的是什么呢?它针针对的是这种情况啊,往下看拿种情况的这样的,假如说我现在有一个这样的工作流,这是一个节点,这是一个节点,这是一个节点,这是一个点,好呢,这个也是一个节点,然后呢,它们之间的依赖关系是这种。哎,应该没啥问题对吧?好,那大家想一想啊,如果就是这,当然这个工作人要执行的时候,他肯定是怎么执行,比如说这是一,这是二啊,这是三啊,这是四啊,然后呢,这是五,他肯定是怎么执行,是不是一跟二是并行执行的对不对,他俩完成后是不是三跟四并执行,最后是不是在执行五啊对吧,正常执行是不是肯定是这样去执行啊,对吧?然后来假定一下个东西啊,假定这个一这个节点对不对,那他在执行的过程当中,他直接报错了。
22:18
对不对?一要是报错了之后,那三能跑吗?三肯定跑不了的,但是二能不能跑,理论上二是不受影响对吧,但是呢,虽然二不受影响,但是咱们这儿应该能推测出来,就是说呃,如果一的问题不修复的话,那我这个任务最多也就是执行到四肯定也会停滞。对吧,因为五肯定是跑不了的,没没错吧,OK,那所以说这时候呢,他就会有一个策略,什么策略呢?如果A出错了,那与之并行的那个任务,我是让他先继续往下跑呢,还是说也让他给停了呢。啊,这样,因为他知道这个东西到最后肯定是跑不下去的,对吧?啊是这样的啊,那所以说此处的这个失败策略对吧?一个是继续,一个是结束,他指的是谁的继续和结束呢?指的是那这个失败的节点的对不对?哎,并行的那个节点是继续还是结束,如果在这儿我们设为继续,那也就说一失败了之后,二四接着跑,那如果说这儿你设为结束了,OK,那这个一失败了之后,二就直接会停止啊是这样的啊OK,那这是大家需要注意的一点啊,这就是这个所谓的失败策略啊,通常在这儿呢,我们用谁就行啊,用积蓄一般就是积蓄啊好,那现在咱继续往下看,那下面是不是有一个通知策略对吧?通知策略就跟通知有关系了,对吧?那一共有四种,都是什么呀?都发都不发,成功发失败发,或者是成功或失败都发,那咱这儿我们暂时就先配一个都不发,因为我们是不是告警的相关参数还没配呀,对吧,那我们就都不发,好继续往下走,那这儿是不是也有一个优先级,这个优级指的是谁优先级。
23:50
是流程的节了,刚才我们看到过一个原节指的是什么来着,是任务的原级对吧,这是流程的节,好,那现在往下走,这然有一个什么沃克分组,这个是不是就指定咱们这个任务在这个工作流在哪个组里边跑啊,对吧?在这呢,我们DEF方组就完事了,尽量往下走看这这是在选定什么的。
24:08
通知组吧,对不对,你前面假如说我配置了这个,比如说失败发送邮件,那你是不是得告诉他我发给谁呀,对吧,在这儿我们能选谁,比如说选一个big data,那这个问题出来之后,是不是就发发给这个组下面的所有人。没问题吧,那那在这儿呢,我们这儿暂时就先不配置这个发送邮件的内容了,好,那接下来继续往下走,这儿还有一个什么收件人,对吧?这个收件人其实也是在配什么呢?也是在配置这个告警的通知对象,也是通知对象呢,我们的配置方式有两种,要么你在这儿直接指定一个组,或者说在这儿呢,你也可以直接指定什么收件人,OK,那出问题之后,他既会发到这个组里边的成员,也会发到收件人里边的成员啊,这个收件人在这儿呢,我们也是能够写多个收件人的啊,OK,那这个大家注意一下行了,好,那除了能来指定收件人,是不是也可以抄送啊,对吧?这个抄送大家平时用过吗?
25:00
就是你发邮件的时候是可以,比如说诶是抄送给某一个人的,对吧,但那个人是不是就能够看到你跟你的收件人之间的这个,哎,往复的这个回信啊,对吧?哎,他是能够看到的,这就所谓的抄送啊,OK,那这个了解下去了,好最后一个参数,这是一个什么东西呢。补税对吧?这个补税指的又是什么?补税实际上是离线数仓当中一个比较重要的概念啊,什么叫补税啊,什么时候才会需要补啊?前面的东西没完成,是不是将来你才需要补啊,对吧?比如说你昨天的作业没写完,你今天去了就得补作业,对吧?这就所谓的补数的这个概念,这个离线入仓,那咱们这个任务通常是怎么跑的,是不是应该是一天一天的每天都要跑,对吧?那假如说啊,前两天我的任务出错了,或者说我前两的任务没跑,那我到今天之后,我是不是得把前面的任务补上才行啊,对吧?这叫补数,就是补前面落下的这个任务,那就叫做补数,好那这个补数呢,我们有两种方式,你可以点一下啊,哪两种方式呢?一个叫做串行执行,一个叫做并行执行,好串行跟并行这个怎么理解?
26:05
很简单,假如说啊,我需要补的任务有前三天的任务,前三天的任务啊好前三任务,那你说这三天的任务,我我要是正常情况下去执行,是不是肯定是一天一天的去执行啊,对吧,这是正常的情况,那现在我是不是诶前三天的任务都没执行,我现在需要一块给他补上,对吧?那这时候咱就得考虑一下吧,我是这三天串行着跑,还是三天并行着跑,对不对,是不是分两种情况对吧?那大家想一想,你说这个怎么去确定我到底用哪种方式呢?对,你就看有没有依赖吧,对吧,那如果说比如说我第二天的任务依赖第一天的任务对不对,那我是不是就必须得用串行执行啊,对吧,那现在回忆一下大家,你说我们数仓的这个任务。咱们应该要是补数的话,我们应该用串行还是用并行。回忆一下,假如说我们现在出仓里边,我有前三天的任务忘跑了,我需要补上,你说咱们用串行还是并行?咱应该用哪种,应该用串行,为什么会用串行呢?你回忆一下,就是咱们数仓里边有几张表,它是会用到什么前一天的分区的吧,比如说咱们那种TD的表,TD的表大家回忆一下,TD的表我们在进行装载的时候,是不是每天都要拿前一个分区的数据,再加上今天的数据进行一个累加呀,对吧?那这样一来的话,是不是咱们每天都会依赖于前天的数据,所以说那咱们得用什么,咱们得用串行,哎,但是如果说没有这样的表对不对,那我是不是,那每天的任务是不会互相依赖的呀,对吧?那你就可以用并行了,诶是这样的两种方式,那这个补数到底怎么做,我后边有时间我给大家演示一下啊,那暂时我们就给它勾掉行了,我们现在不是补数了吧,我们就是跑一天就跑着玩对吧,那咱就把它勾掉就行了,好了,那也就是这里边咱们必须要配的参数,其实也没啥要配的。
27:48
对不对,是不是上来之后直接运行就完事了呀,对吧?但是这些参数都是啥,咱们也得有所了解才行啊好了,那现在呢,我点击运行,点运行之后大家都观察这是不是提示一个成功啊,对吧,成功之后也就现在这个任务是不是已经开始跑了,这时候工作流实力里边是不是会出现一条记录,对吧,你看他那现在这个状态是什么,是不是这种蓝色的小小小齿轮啊对吧,一直转,那这个状态就是什么状态呢?就是正在运行的状态,但是这个任务很简单,但是不是已经跑完了对吧?好,那这儿跑完之后,比如说我想去看一下这个任务的执行进度,怎么看呢?点点它点完之后是不是就来到这个图上了呀,对吧,你会发现咱这是不是每一个节点都变成了绿色了呀,对吧?OK啊,这个绿色的这个小对勾就表示这个节点已经成功了,OK啊,那当然除了成功的状态,还有其他的状态在这,因为他这个太快了啊,所以他们没看见,应该是慢点的话呢,你应该是能看到的,如果这是一个刚才那种蓝色的旋转的小齿轮,表明这个节点的任务正在执行,那如果这儿呢,是一个灰色的圆圈,里边有一个小叉子,说明这。
28:48
这个任务他报错了,诶是这样的啊,OK,那这实际上就是咱们这个如何查看一个工作流的执行进度,是不是在这儿是能够看到的呀,对吧?好,那假如说有一个节点它确实是报错了,那我现在得干啥,是不是得去看他的日志啊,对吧?那怎样去看他的日志呢?
29:04
等于去看他的日志啊,两种方式,你其实可以在这儿看,你比如说双击这个节点,那完之后右键看,这这是不是有一个查看日志,你就能够看到它最新的一个日志是能够看到的,那或者说呢,你也可以去哪看呢?来去哪看,来到任务实例,注意观察,你看任务实例咱们出来几个,是不是出来了三个呀,对吧?而且这三个出来的顺序是什么样的,是下边先出来啊,下边先出来,然后再出来上面的你看是什么,是不是A跟B先执行,然后最后C在执行啊对不对,那在这呢,我们也是能够看到这个实例的,那我要想看他的日志,咱们去哪看呢?去哪看呢?往后走往后走,这这是不是有一个查看日志啊,对吧?比如说我看一下A节点的日志点,那要看最后这是不是依靠了一个AA,是不是打印出来了呀,对吧?OK,好,那就往下走,那看B的日志是不是打印出来了一个bbb呀,对吧?那这样呢,是不是打印了一个CCCC呀,对吧,没问题吧,好了,那也就是现在呢,我们这个所谓的工作流的运行咱们就完成了,然后这样呢,大家需要知道需要掌握的内容是什么呢?就是咱们一定得会看任务的执行进度,一定得会去看这个任务的日志才行啊好了,那这个完成之后,我把视频停一下。
30:11
呃,来各位同学,那现在我们再来看一下这个工作流,咱们要想去定时,那应当怎么去做,要想定时的工作流,咱首先得先找到谁,是不是还得找到你要定时跑的一个定义啊,对吧?找到功能定义是不是还找到它,然后点谁A是不是点这个呀,对吧?好,那点定时,诶点完定时之后,你就发现咱这是会来到一个什么,是不是一个定时的配置界面啊,对吧?咱们先把这个界面大概的熟悉一下,呃,其实跟刚才咱们在运行这个工作流的时候呢,哎,他们有一些参数是相同的,哪些是相同的呢?下边这一堆跟刚才咱们运行的功能是不是一样的,对不对,包括这里边什么失败或者是呃,什么这个这个策略对吧?然后下边什么通知策略,什么优先级分组通知的等,是不是都是一样的对吧?不一样的其实就是前边啊,就是前面这这些这些是在配什么东西。这个大家应该能看明白吧,起止时间有开始有截止的时间,这是在干啥?是不是在配置那个定时的规则呀?这套规则大家还记得是啥吗?
31:09
应应该有点印象吧,这时候咱们应该是学过linu当那个Co type那个定时工具啊,对吧,跟那块那个东西是不是一样的呀,对吧,这个零表示的是啥来着。这个问号表是什么来着,全忘了是吧?这个也不用记住啊,它这块做的比较合适啊,比较比较简单,它是一个可视化的一个配置,比如说我现在呢,要想去配置一下这个定时怎么配呢?你点一下你不用记住里边的是啥,它是一个可视化的配置方式啊,这个比较方便啊,OK,假如说举例子啊,咱现在要做的工作就是干啥呢?就是对这个工作流进行定时调度对不对?那假定咱现在这个工作流就是我们数仓那边的工作流,那咱数仓那个工作流通常是怎么去定时的,是每天晚上是不是零点之后去跑了对吧?但是一般不会让他零点正好就开始,就正好零点就开始跑对吧?一般让他零点是不是过一会再跑对吧?比如说00:10开始跑,那现在我就让这个工作流每天的00:10开始跑,那应该怎么配呢?
32:03
很简单,首先我们从年开始啊,年是不是应该是每一年对吧,你就每一年就完事了呗,对吧,然后月呢,那每一个月呗,对吧,好,那天呢,那每一天呗,对不对?好那小时呢。还能每一小时吗?不能了,咱们就得是零小时了,对吧?零小时怎么学?具体小时数呗,对吧,然后呢,这里边我们选一个零,那就哎完事了对不对啊,这个再再点一下,再点回来那零,那完之后该写该这个分了,对吧,好分,那咱们应该怎么办呢。具体分钟数吧,对吧,就选零是不就完事了对不对,好秒呢,那也就具体秒数,那就完事了,好那也截止到现在呢,我们该配的是不是就都配完了呀,对吧?好,那完之后你点一下这个执行时间点。点完之后呢,他会给你计算出来,就是接下来的五次的执行时间,你可以看一看,诶诶咱们这个,诶那个十不刚才没选啊,对吧?啊来没选分是吧?啊啊咱们应该是那个分不是零分,应该是哪哪分钟应该是十分对吧?这个咱们点一下啊,点到这个十好那完了之后呢,我们再重新计算一下这个时间,你看接下来要执行的这个时间是不是就是2月6号的00:10 2月7号的27号的这个00:10,还有28号的00:10啊对吧?哎,这样一来是不是咱们这个配置就算完成了,对吧?非常的方便啊OK,好,那这就是如何去配置这个定时,好,那这个配完之后呢,下边这是不是有一个创建呀,对吧?你点击创建,那它就会去创建一个这样的定时规则,哎,当然我我要是创建一个这样的定时规则,咱们能看到那个定时的效果嘛,咱们看不到对吧,咱们不能等到这个时候再去看,对吧?所以在这咱们为了看到这个定时效果啊,我们换一个定时的规则,比如说我让他每分钟跑一次,每分钟就跑一次,咱们等一分钟是不是应该能看到它执行一次啊,对吧?好,那咱们调整一下。
33:41
我要想每分钟跑一次,怎么调整啊,首先年这个时候还是每一年,月还是每一月,天呢还是每一天,对吧?小时呢,每一小时对不对?分钟呢,每一分钟对吧?那秒呢,每秒是不是就完事了,对吧?哎,不不不是秒,每一秒就不行了,咱们具体秒数应该是零秒对不对?OK,那这样一来是不是就是一分钟执行一次啊对吧?好,那现在呢,我们点一下执行时间,你看是不是一分一次啊对吧?好,那这个定时规则完之后呢,我点击下边的创建。
34:10
好了,那到现在为止呢,那咱这个工作流它的定时是不是就算是定好了,OK好,那我现在这个工作流它会每每分钟执行一次吗?其实并不会,并不会啊,你注意啊,你这样点完之后,你发现后边又出来一个东西,什么东西呢?定时管理啊,实际上这个定时管理里边有什么东西呢?点进去哎,你会发现这里边是不是有一个,诶咱们刚才定时的这个规则呀,对吧,那完之后他现在开始跑了吗?还没有开始跑,为啥呢?因为它的状态仍然是下线的状态,对吧?那所以说我们这时候就怎么办呢?在上线,只有你点了上线之后,它才开始真正的进行定时调度了,就是一分钟一次,一分钟一次,诶是这样的啊好了,那也是我们现在要做的工作,就是干啥呢,找到工作流实力,咱们在这蹲他一会儿对不对,如果他正常的话,是不是应该是一分钟会出来一个工作流实力啊,对吧?来咱们稍微的等他一会,等他一分钟,OK,在等的时候咱们也已经出来了啊,是不是已经过了一分钟对吧,正好是15:23分钟,是不是跑了这样的一个工作流啊,对吧,这一点。
35:11
还要稍微的注意一下啊,当然各位同学啊,其实这展示的这个时间啊。跟我Windows这个时间有没有可能不一样啊。有就是你这儿展示时间不是你Windows上的时间是哪的呢?是你这个linus系统的时间对吧?OK,那在这你比如说执行一个data,当然我这儿的这个Li系统时间正好就是跟网络同步的,所以说这儿的时间跟这儿的时间正好一致,假如说你那的live系统的时间跟网络时间不同步,对不对,跟你Windows这边不一样,对吧?诶,那他就得以以哪为准。以你Li为准,这个注意一下啊好,那这块大家理解下去了,好正现在正在执行,然后我刷新,然后你要注意啊,就是这种调度执行的这个任务,他的任务类型跟刚才我们运行的那个任务的类型是不是不一样。对吧?这个是不是我们刚才点运行执行的那个实例啊,对吧?那这个是不是我们调度执行的实例,他们是不一样的,这一点稍微得注意一下行了,那这个工作流呢,咱们让他跑一会儿得了,就不让他一直跑了,那现在呢,比如说我现在不想让他去再定时调度了,那怎么处理啊,很简单,你找到谁找到之前工作流定义对吧?找到定时管理点击下线,那这个工作流是不是就不会再重复执行了,对吧?就是这个逻辑啊,好了,那截止到现在呢,这个工作流的运行和定时咱就都讲完了啊,来完成之后我把视频停一下啊。
我来说两句