00:00
那第二一个也是咱们使用上的一些习惯,一个叫扇子的UUID唯一ID。那这个东西有什么用呢?其实咱们平常很多你会看到代码没指定,没指定它默认会自动生成,那它又有什么用呢?首先。你要知道咱咱们是不是经常用那个保存点呢,Safe point。那我们说用self point是不是有其中一个场景是什么,我升级我的作业对吧,比如说我现在,呃,对原先的逻辑我做了一些修改,或者说呃,我。做了一些调整,我要升级吗?那你是不是得重新提交。那你又想要之前的状态,你是不是应该手动触发一个保存点对吧?但是问题在哪呢?你保存键怎么跟你原来的,比如说你扇子。增加了一个算子,或者删了一个算子。或者它的拓扑结构变了,就算子的前后关系都变了,那你用safe point去恢复的时候,或者说从safe point启动你的新架包的时候。
01:11
这个时候可能会报错,因为它对应不上对吧,那这个UUID就是可以帮助我们将某些算子把它标记清楚,那我们去做恢复的时候知道哦,哪一个是我们。呃。保存点里面的哪一个状态对应的是哪一个算子啊,它就非常的明确了。所以呢,基于此呢,咱们也知道,对于一些状态的算子,咱们最好呢,就指定一个UUID,但是有一些是无状态,你不指定也行。但是有时候你也不知,你也担心说啊,有的到底是是不是有状态,一下子可能会漏,那你干脆怎么样。所以从实践上来讲呢,我们建议每一个算子都加上UID。另外呢,如果你有多个多套题群,你也可以通过UUID就不会搞混啊也可以。
02:07
那如果默认情况下,咱们没去指定的话,它默认是根据咱们作业图一个拓扑结构啊,并且呢,它会通过一个哈希算法某某哈希三啊,去生成一个它的一个算子UID啊。也就是说咱们改代码改变了这个拓扑结构啊,就算子之间的连接关系可能啊。会让我们呃无法从保存点恢复了,那所以推荐就手动指定对吧,可以让我们有效的将算子的状态从保存点映射到作业修改后的正确的算子上,就比如说举个例子啊,还是刚才说你原本是ABC3个算子。就很简单,哎,之后呢,你要升级你的作业,你变成这样。呃,Ad。呃,B。E。对吧,你从原先你的算子逻辑关系是这样啊,你想升级你的代码,这个时候你做了保存点,保存完之后你的代码是这样子,你要去恢复的时候,它就对不上了。
03:09
对吧,他怎么知道这个是。B还是不是B啊,他哪知道现在新的B在哪里啊,原先的B是现在代码,新代码里面的哪一个算子它对应不上,但是一旦你指定了UID是不是起了个名字,怎么起呢?你可能给这个B,这个算子它是代状态,你给它取了UID是B,小B。好,接下来你新的代码里边,你只需要。他这里是不是也有那个名字还在小B,所以他从保存点恢复的时候,他就知道这对应的状态应该是恢复给他的。也就是说你给人家起一个固定名,人家才能找到啊,即使说你把它打乱了,你也能找出来。替换算子啊,增加新算子啊,删除一些算子,都有可能产生这个问题。
04:01
那UID的指定方法也特别简单,就是在咱们的算子后面调用一个点UID就可以了。然后呢,传了一个字符串名字,名字随便取,但是记住要唯一啊,不唯一它就报错,另外还有一个,咱们其实是可以指定一个name,这个方法把当前这个算子起一个名字。这样也方便去查看的时候,这个当然仅仅是为了我们方便啊,不影响咱们刚才说的那个保存点。那接下来我们演示一下,我如果不用UID,然后呢,触发保存点,再之后呢,我修改代码再重新恢复会有什么问题。我们还是提交这个UVDEMO的案例啊。其他也没什么指定的参数了啊,就资源。来,我们尝试着提交。让它跑起来,跑起来一会儿呢,咱们要触发保存点。触发保存点有两种方式,第一种直接触发,直接触发的话,它就呃不会停止任务,任务还在,只不过你触发的时刻帮你存一份,另外一种比较常用,就是取消的时候咱们去触发保存点啊,这个场景就是咱们要升级代码对吧?啊这个时候呢,取消同时触发保存点,那就这个语法。
05:21
拷过来。这个语法好,Cancel-S在接下来目标路径,咱们要把它打到HDFS啊,保存点路径啊,我前缀用这个吧。就一个HDFS的路径,好是这个作业ID怎么来呢?你去word UI页面看一下就行了。或者咱们刚才提交的时候,这里是不是有一个旧版ID啊。对吧,这一套你直接拿来用就行。ID是这个,那么如果你的命令行已经不见了。
06:03
那就我们说的,你从web UI点进来,点进来之后上面这里也有一个job ID的,你拷贝它就行,再往后看,后面需要杠YID。YID的话,指定的是雅恩的一个应用ID,不然他怎么知道哪一个啊,如果你是真的就不需要指定这个东西,来,我们把它拷过来。我们瞅一瞅,这个任务应该check point做了好几次了吧?啊,做了十多次了,那我们把这个命令拷过来执行一下。嗯。你看现在已经取消了这个作业,并且呢,将保存点保存在了HDFS前缀呢,这是咱们指定的,后面是它自动生成的一个文件夹,好。
07:02
现在呢,你也可以看一下这个作业是不是停掉了啊。刷新这个作业停掉了,好在接下来咱们改代码来。UVDEMO。在这呢,我想讲,哎,这。我们把它打开。相当于说我插了这几行代码,也就处理过了,这个我又掉了一个几百一个map,这个map里面这个函数是有状态的啊,这个是有状态的。相当于说我当然我这边在写这两行没有意义,只是为了演示一下效果啊。那新生成的这个就是拓扑结构就不一样啊。那我们重新打包。模拟一下你升级代码的场景。其他都没改,就加这么几行。
08:08
好。打完包咱们。上传。上传好了,接下来要去做恢复了,从保存点恢复这个命令也不难,来,我拷过来给大家看一下,其他的你提交作业的时候该怎么写怎么写,对吧,让该雅安破旧吧,就雅安破旧吧,内存该多大多大全,内名价包,病情度啊等等都一样,唯一要加的是这个杠S,杠S就表示呢,我是从保存点启动的啊,从保存点恢复的,那这边这个路径咱们得改一下了,这个是我之前的案例,咱们要拿最新的这个路径。是这个。考一下,替换一下。
09:00
替换掉。替换掉了吧,什么3948 3948好对了。那接下来我恢复。代码了,上传完炸包了,也指定从保存点恢复了来提交。客户端我们能看到他是能提交上去的,你看在部署了吧。好,现在显示作业已经提交成功,我们来看一下雅安。而且呢,也已经开始running了,但你不要高兴太早,现在你再看。Fed。那这个时候这里也没日志,这里也没,呃,该怎么看呢?看雅安日志就行了呗,来,我把它用雅安命令来看一下啊,找另一个节点吧,雅安logs-application ID翻一下,我用less来看。这是雅日志归集的对吧,我shift加G跳到最后再往上翻,这样快一点翻翻翻翻好了,这里又报错了。
10:10
往上翻,哎,大家看最后一个cosby说的是什么?非法的状态异常。什么呢?Fire to roll back回滚,从check point或者safe point恢复失败,对吧?他说什么呢?不能映射这个保存点状态。为某一个扇子。什么呢?新的这个项目。新的程序。对吧。另外这种情况怎么办呢?如果你之前就是忘了指定UID,那么也行,你可以跳加上一个参数杠杠。Lo restored state就是允许跳过无法恢复状态的上,但是这样的话,你你自己想一想。
11:01
状态无法无法恢复啊。那你的计算结果还对吗?是吧?那如果是新增加的节点,那还不要紧,那如果是原来的对吧。那所以还是建议大家去指定一个UID。那么接下来咱们看另一个案例。UIDDEMO。UIDDEMO这里面的代码逻辑跟UV那个DEMO一模一样啊,一模一样,那么目前呢,但是我做了什么事呢?我每一个算子都指定了一个UID。UID。UID。UID里面传的就是一个字符串就行了啊,要养成这个习惯啊,每一个都指定一个UID,那名字呢,就名义呢,你喜欢什么就行,但你至少说同一个作业里面,你不可能名字重复嘛,对吧,那像我这边就是。呃,我习惯性是这样,这个算子的作用是什么?然后再带上这个算子的名称对吧,比如说这个map算子,我是解析Jason,我就叫pass Jason,然后杠map map上啊。
12:09
那比如说后面这个map。咱们是。呃,做新老用户修正的,那我就。写一个我看得懂的啊,修复新用户呃新老用户,然后呢,卖好扇子这个命名习惯看你自个儿啊,但最好有一定规范,那至于后面这个点内呢,只是为了方便你去看,怎么看呢,沃UI看。那咱们直接提交呗,废话少说,给大家瞅一眼。当前是第一次提交这个UIDDEMO啊。好,等它部署上去。部署完之后咱们查看。
13:00
首先在这你能看到什么呢?来,我放大。这个就是什么呢,点内。点内呢,咱们就可以在web UI看到的不再是默认算子名,而是什么指定的名字,这样的话,你如果你的拓扑结构比较复杂,这样你也不至于乱啊,这还是我觉得比较好的啊。另外呢,你去看看。看一些东西,你就认这个算子名字就可以了。好,这是点name,那我们接下来要干嘛呢?触发保存点啊一样的。嗯,咱们改这个就行了,还是canl-S路径还是这个路径吧,然后这个作业ID不一样了吧,作业ID我改一下。YID应该应该是024还是025了,瞅一眼吧。啊,改0025了对吧,啊改一下。
14:02
好,那么接下来呢,咱们触发保存点。病啊。好,我们看日志,这里显示已经取消作业,并且成功触发了保存点。这个路径是不是得拷贝一下对吧。那咱们拿下面这个。替换掉好,呃,UIDDEMO这个案例保存点路径得重新拷贝啊,拷贝这个。把这个路径。换一下杠S嘛,好,那我们看看这次提交能不能成功。哦,不对,咱们还没有啥呢,没改代码呢,对吧,那这边同样的我还是加这么几行啊。
15:00
再调用一次几百个map。然后呢,你大家注意,虽然多加了一个,但我UID是不一样的啊。对吧,ED不一样。扇子看起来是一样的。清空。打爆。嗯,来替换一下。替换完咱们指定从保存点恢复来,就是改好了这个命令。提交。咱们就在这等就行。已经提交上去了。好呢。
16:00
至少我们现在再刷一下,是不是一直在running呢?我们看看拓扑结构变了没有。拓扑结构大家应该很熟对吧,一条直一一溜过去。这个是不是就咱们家的那个算子啊,对吧,提拜加map,那你看它是不是有名字啊,ADD FA new什么什么什么对吧。这就是咱们家的,这是通过点name指定的名字,另外大家也可以看到当前拓扑结构确实改了,而且呢,这个作业呢,也是现在很正常的在运行着啊。这个就是指定UID的好处。好了,就演示到这里。
我来说两句