00:01
呃,好了,同学们,那我们再继续往下进行,呃,下边呢,我们要演示的内容是什么呢?诶,是这个工作流失败重跑。工作流失败重跑,呃,这个工作流失败重跑呢,其实还是一个呃比较重要的一个知识点,虽然它很简单啊,但是很重要啊,为什么很重要呢?呃,因为大家呢,应该是能够想象到的,对吧?比如说举个例子啊,我们现在呃这个已经开始工作了,对吧?诶那我现在呢,呃已经嗯把这个离线数据仓库的,呃它的一个什么呀,他的工作流已经定时的调动起来了,正常情况下咱们都是每天晚上去跑,对吧。没错吧,那咱们前面也强调过,就是我们这个工作流呢,不是说每次跑都是一帆风顺,都是那么的顺利,对不对,我很有可能啊,我跑到一半的时候,某个跑到某个任务的时候,对吧,失败了对吧,失败了之后正常啊,他是不是会给我们去发送这个告警的通知啊,对吧?好,那假定我们现在接收到通知了,接到通知之后怎么办,同学们。接到通知之后怎么接收到通知之后,那我们是不是应该去马上起来查看,那咱们这个任务他到底是哪出错了呀,对吧,能理解吧,OK,好,那假定我们已经找到了问题所在,然后已经解决了这个问题了,那你说我们接下来玩。
01:15
我们接下来是不是得让这个工作流赶紧继续跑啊,对吧,没多少同学们,OK,好,你让这个工作流继续跑的话,那我们是不是有两种选择,哪两种选择,一种选择让这个工作流从头开始跑,那当然还有一种选择肯定是啥呢?是不是应该是断点呀,对吧?断点续传对不对?你上次从哪儿失败了,你就从哪接着跑啊,或者说你从哪跌倒了,你就从哪爬起来,是不是应该是这样的一个逻辑啊,对吧?哎,那我们怎样去实现,比如说我让他从头跑,或者说我让他从失败的位置诶继续往下跑呢?我怎样去实现这个功能呢?啊,OK,那接下来呢,我就给大家去演示一下啊好了,那接下来呢,我们干啥?咱们模拟一个咱们刚刚所说的这种失败的场景。OK,然后呢,我们再去,呃,给大家演示一下,我们到底如何去解决问题,如何去呃干啥呢,如何让这个任务呢,重新的跑起来啊,是这样的啊好,那现在呢,咱们就来模拟一个这个真实场景。
02:08
咱们怎么模拟场景呢?我们就还以当前的这个所谓的hello word这个工作流为例去演示啊,呃,来各位同学,我先给他下线啊,咱们编辑一下这个工作流,然后我们稍微回忆一下,就是当前咱们这个工作流里边node a节点它做了一个什么事儿,同学们,当前这个node a节点是不是调用了一个我们,呃,这个资源中心的文件呀,对吧?它调用的是这个test的对不对?那当前这个功流能不能正确的运行呢?诶,我们先给它保存一下啊,咱们先让它跑一下,看能不能能不能跑成功,来我们点上线,然后再点运行。哎,其实肯定是能能能运成功的,对吧,刚才我们已经运行过一遍了,稍微等一会儿啊。稍等一会儿,他能不能运行成功呢?诶是能够运行成功的,对吧,没错吧,同学们,OK,好,那完了之后,咱们现在怎么样能够去模拟一个这个让他失败的场景,很简单,我们让啊no的A这个节点所依赖的这个脚本,我让他报错对不?我让他报错,那咱们这个工作流是不是正常A节点就会失败啊对吧,OK好,那也就是怎么怎么能让这个test斯这个这个这个脚本去报错呢?很简单,咱们去改一下这个脚本是不就完事了,对吧?我们找到资源中心,呃,资源这个这个资源中心啊,找到资源中心之后呢,我们找到一个TSH对不对,那在这儿呢,咱们其可可以编辑这个文件点一下,编辑点完之后呢,咱们不让他去打印这个什么,呃,Hello,这个sh hello,这个这个这个这个内容了,对吧,咱们让他干啥呢?我让他执行一个。
03:31
不存在的文件对不对,我怎么写呢?比如说随便写一个根目录下边的not exist,对吧?Ex exist2对,我让他去调用一个根本就不存在的一个脚本,那他是不是肯定会报错呀,对吧?应该会报这个文件不存在,找不到这样的一个类,类似这样的错误,对吧?好,那咱们现在呢,给它保存一下。好了,这个文件咱们保存完了,那我现在是不是相当于就模拟了一个咱们真实的一个错误啊,对吧,现在我们的hello word这个工作流里边的A节点去调用这个TH的时候,它是不是肯定会报错呀,对吧,没错吧,OK,那现在咱们去诶测试一下啊,看一看是不是真的会报错,来我们点击上线,然后点一下运行。
04:12
这边咱们这样啊,我们这个通知策略呢,也是咱们来一个成功和失败咱们都发对不对,诶然后呢,我们选一下这个告警组,选谁呢?选咱们刚刚这个big data email这个,那OK好,那这个完了之后呢,我们点击一下运行。好了,那理论上一会儿这个工作流它应该是会失败的啊,失败了之后那是正常我们会接收到一个失败的告警通知啊,对吧,大家来看这儿是不是有一个field的这样的一个告警邮件,对吧?诶在这咱们也能看到这儿的一个状态,是不是失败的状态,对不对,我们可以点过去看一看啊。好看一下,那当前这个呃,工作人是,呃这个这个product也是项目,是哪个也是hard这个项目对吧?那完之后呢,你会发现那是哪个节点出问题了,是note a这个节点出问题了,对吧?那它的类型什么是shell类型,那当前的状态什么是failure对不对?OK,其实你再往后看啊,它后边还会有其他信息,它会展示出来什么呢?就是你当前这个任务。
05:05
对不对,它的一个日志的路径对不对,你就说他错了,我想看日志嘛,对吧,他会同时把这个日志给咱们打印出来,好,那我这有三台节点呢,我去哪台节点看这个日志呢?诶这儿是不是有一个节点啊,对吧?诶是在104这个路径下边,其实你就能够看到咱们这个错误日志,那能不能看到,咱们可以去看一下啊,来到104对吧,我们直接来一个ta,然后呢,杠,诶比如说500看到最后500行对吧?然后呢,跟上这个日志,OK,那咱们就能够发现这个错误的日志了,你看这里边是不是很明显对不对,Not exist.sh是没有这个文件或目录的吗?对不对,这个咱们应该是能够看明白的啊,好了啊,当然这个日志我们其实也没必要非得去这个节点上面看,咱们去哪看,我去这个dolphin sc web UI是不是也能看到啊,对吧?我们找到任务实例这块,咱们应该能够发现这儿是不是有一个A节点运行失败了,对吧?我们点后边的日志,咱们是不是就能够看到诶这些东西啊。没问题吧,各位同学,这块咱们是能够看到的,没有没有这个文件和目录跟刚才看到是一样的,对吧?好了,那这个日错误咱们就找到了,对不对?OK,好,错误找到了之后,那我们继续往下进行,各位同学啊,下边咱们分析一个什么问题呢?咱们怎么去解决这个问题。
06:13
对不对,OK,你发你应该能够看到咱们当前的这个工作流呢,我们跑到哪儿,我们A节点跑完了,呃,A点跑失败了,B点跑完,但是C节点还没跑啊对吧,对不对,我得解决问题,我得让他接着往下跑啊对不对?好怎么去做呢?其实非常简单啊,报错之后,首先同学们记住找认找工作流实力,注意是搞找工作流实力,那不要去找这个工流定义,你找工流定义之后,你再运行,那是相当重跑一遍,对吧?咱们要找工作流实例啊,找到实力之后,找到你刚才报错的那个实例,然后干啥呢?注意观察这里边是不是有俩按钮,一个是重跑,一个呢是啥?一个是恢复失外,OK,重跑就是啥意思呢?重跑,再把这个工作流里边的接人都跑一遍啊是不管有没有成功啊好,那是这个从室外恢复那啥就是断点续传呗,对吧,那我从哪室外的,我从哪接着继续往下跑。
07:03
啊,这样的啊好,那我们正常情况一般都是采用这个恢复失败是不就行了,点这个绿的啊,但是我们现在还不能点,因为我们现在只是发现了问题,还没有解决问题,对吧,那现在我们再去把问题解决一下,怎么解怎么解决呢。来,我们再把这个脚本给他编辑一下,是不是就OK了,对吧?好,那我们给它编辑一下啊,比如说我们再改成一个能够执行成功的一个命令,对吧?那我们现在点击保存好了,那现在呢,我们再回到项目管理,回到这个product,回到工作流实例,找到刚才失败的工作流,对吧?然后呢,点击恢复失败点。点完之后呢,这稍微等一会儿,这个状态呢,就会变成诶一个运行的状态,咱们刷新一下,诶现在其实已经跑完了,对不对,而且你会发现它的一个,呃,这个运行的类型是什么?是从失败的节点开始执行对不对,那当然这样呢,是不是也已经给咱们发送这个通知了,对吧?现在是什么是成功的一个状态,我们就不去看了啊,那现在呢,我们再去看一下下边的任务实例,同学们注意观察这个任务实力它有什么样的特点啊。好好观察一下同学你看啊,呃,首先那我们这边呃先看哪呢,咱们先看这块儿。
08:06
这是我们第一次去运行这个工作流的时候,它所执行的两个节点,对吧?它执行的一个A,执行的一个B,但是并没有执行C,对对,这里边发现B成功了,但是A失败了,对吧?那当我们修复完问题之后,他又重新的去执行的时候呢,你会发现啊,是不是A重新执行了一遍,但是B跑了吗?B没跑,因为他已经成功了对吧?诶,然后呢,后边C就可以跑了,又执行了一下C,这是不是相当于是就是把咱们之前成功的任务跳过对吧?然后呢,再继续跑我们这个未完成的一个任务啊,对吧?那所以整体来看呢,你会发现那他跑的节点,其实跑成功的节点啊,跑成功的点只只有谁,是不是就是有A有B有C,这三个节点是不是各自只跑成功了一次啊,对吧,这个大家应该是能够看明白的啊好了啊,那这就是我们如何处理高频SC当中对吧?这个工作流失败的一个情况,失败之后我们要解决问题,解决问题之后呢,我们需要去干啥呢?需要去诶从失败的位置恢复这个工作流,这个是大家需要注意的,那以后大家在工作过程当。
09:06
从遇到类似的问题呢,也可以这样去处理啊,行了,那这个完成之后视频我停一下啊。
我来说两句