00:00
好,接下来呢,带大家呀,先去看一下job吧,提交流程的源码,然后呢,再去看这个呃,切片的源码啊,把它分成两部分啊,因为这个两个部分都一起看的话呢,大家容易去晕啊,那行,那这个job提交流程源码怎么去看呢?啊,我们之前是不是第一个案例就是world count呀,哎,就这word count,那这个第一式还是很珍贵的是吧,像宋老师的第一式啊,不知道给了谁,那我们就用这个第一个项目进行一个,诶查看它相关的一个源码。那最难的就是怎么打,问你对吧,哎,打在哪。那大家想想我打在哪儿呢?这程序的入口。配置信息设置信息,设置信息哪是提交呢?Wait for complic,哎,这呢才是提交的代码。好,那我们就在这打一行代啊,打一个断点之后呢,Dbug进行运行,能运行之前我这个OUTPUT2应该是存在来个666啊,希望能一次成功是吧?嗯好嗯,右键第bug诶点下面那个虫子的啊虫子的OK。
01:04
直径。好,那接下来进到这了,进到这之后啊,怎么办呢?我要想进入到这个wait for complication怎么办进去对吧?哎,想办法进去点这个强制进入,进入之后这里面啊呃,我提前答,嗯。打个点,嗯,我们接下来要看的呢,就是这个提交,提交流程submit,那some,现在啊,当前说这个state,如果等于这个job state DeFine,如果它是DeFine的话,就能往下走,对吧,那你看一下当前这个值是不是DeFine是,那是的话呢,它就能往下走进,那就来到了这个sum,那萨米我们想进入。进入进入之后我先打几个断点啊,防止你手快了啊,直接跳过去了,行,我现在这三个地方啊,先打上断点,那第一个呢,叫source states,哎,确保你的状态是正确的,那你进去呗,进去看一眼。
02:01
对吧,哎,进来看一眼啊,一看这里面就是两个如果状态啊不对,抛异常啊,这个呢是如果状态是running啊,又抛一常对吧?哎这么几个那行,那这个呢,其实对我们来说啊,意义不太大啊,看一下就行了,就可以出来,出来之后接下来进到这个set柚子new API啥意思呢?进去看一眼。看一眼之后。往下走。你会发现其实他这里面处理的是什么呢?处理的是新旧API的一个兼容性问题。还记得吗?咱们hi度里面有hi多1.xapi,以及二点X3点X,对于哪PI,那它API呢是不一样的,那不一样,我要想让它两个都兼容,那怎么办?哎,在这个方法里面进行相关的一个兼容性问题解决,那这里面我就不再详细看了啊,知道它是兼容性问题,一个解决就可以了,我们快速的往下走。哎,出来了对吧,哎出来之后我们进入到了这个connect连接。
03:03
哎,要连接,那我这是一个客户端嘛,对吧,我提交的照吧,是一个客户端,我要跟集群。进行一个交互是吗?那我跟谁连呢?哎,想想我要是跟集群连的话,那我这边哎得有个雅安client进行客户连。但是你看我现在这个集群开了吗。哎呀,我这是真开了哈,但是真开了,你看我这个word count这个代码里面。这里面有连接这个集群对应的地址吗?没有,哎,也就是说现在啊,我们运行这个代码呢,它是完全的是一个本地模式。对吧,哎,你这样,我把这个静音关了。证明你是我的清白哈,嗯,High do和stop,我把静音关掉。这个可以了吧,哎,你说我现在这套代码跟集群一点关系都没有。那我要连谁呢?哎,连接的是它本地的一个客户端,那好,那我们进来啊,进来想办法进去,诶进去进去之后在这个地方打一个断点,这里面就要创建一个cluster啊好,那你就可以大放心大胆的往下走走,哎走到这,走到这之后点进去,提前在这个位置点一个初始化,然后再回来。
04:17
哎,否则你的手术啊,一下子过去。好,那我们嗯往下走,哎一走的话呢,直接就来到了这个地方,进行一个初始化。对吧,哎,初始化,那初始化进去呗,进诶进就来到了这个啊in provide list来往下,那那往下这块呢,我们在哪个地方打个断点啊看看啊。嗯,这里面我们不用打内往下找就行了,往下走往下走往下走。走走到这,走到这的时候,你看啊,这里面说provider provider有谁啊,有一个Yan client客户端对吧?哎,有雅那行,那我再执行,这是一个负循环对吧?否循环找。好。
05:01
让这个负循环执行完。执行完之后,你看又来了。这个provide变成什么local client对吧?哎,刚才是延,现在呢变成了local,那你看一下这里面看provide list。打开。往上看对吧,它这里面有一个零有个一,那么零呢,对应的是雅安客户端,那下面这个是local客户端,那很显然我们当前这个代码呢,运行的是在本地运行,那用到的就是这个local client。哎,好,那行,知道这两个客户端就可以了,这个方法就对我们来说。就够了啊,掌握到这往下走,哎,下面走。啊,结束结束之后出来再出来再出来。好,再找再重来,行,那就回到这儿了,也就说刚才啊,这个呢是看的是新旧API的一个兼容性问题,那connect呢,这里面有两个客户端,一个呢是雅安客户端,一个是本地客户端就可以,那下面我再往下走,下面这个客户端找到之后,我是不是就要向集群提交相关的job信息啊,哎,那这块呢,就是核心代码了,哎,Submit job啊。
06:14
那走到这儿好。诶到这儿到这儿之后我想进去,那进去的话啊,你点一下它是先走的是这个job this,诶第二下才会进到这里哈,你看一下啊,是不是这样的啊,我进。对吧,哎进往下走好,你看又回来了吧,哎回来了,然后你再点一下它,哎进来这回才是进到真正的这个方法里面。哎,那进来之后呢,这里面是提交过程,那提交过程首先我再打几个断点啊,这打一个来这再打一个行了,看啊这叫track space,就是验证的job output space其实是验证它输出路径的一个问题。那看这里面干了什么事啊,我进去看,进去之后我在这个地方打断点。往下往下走,往下走。
07:03
走走走到这走到这啊说track output,检查输出路径是否存在相关的一些信息,那我进去。进去来之后首先看一下不下。好,哎,你看这个路径熟悉吗。File d盘hioop output666,这个是不就是我们的输出路径啊,哎,那就说如果这个输出路径啊,这部是啊,嗯。是输入路径,哎,如果它等于空。这个抛出这个out put边not set啊没有进行设置,也就说你这个输出路径如果没有设置的话,它是不抛,这个说你输出路径没设置啊,你说他不传两个参数吗?一个是input,另一个是output,哎,你没设置这个output,它就会抛这异常,那再往下走,那我们有可能设置了。但是我们设置的呀。两份。看这句话,我设置一个路径,有可能已经存在了。
08:01
如果存在的话,投到什么output directory,哪一这个路径已经存在?这个异常咱们非常熟吧,也就说你同样的代码执行第二遍的时候,它就会报这个数,只要你输出路径没有把它删除掉。啊,现在你就看到了源码的出处啊,他就是在这地方进行校验啊,它会校验两个事儿,一个呢是你这个输出参数必须得给,比如说输出路径必须得给,另一个呢,给了呢,你还得确保它不能重。那出去。这个事儿校验完了,那校验完毕之后继续往下走啊往下走。下下走到这,走到这呢,说job这个job sum进行提交,对吧,来提交你看啊,我也往下走一行,哎,走一行之后,你看它后面提交的什么。说file time hi do map right啊,Stage,然后这个路径下有个它有这么一个路径,那是不是真的有呢?我们来看一下。在我们的地盘。
09:01
Time。看好了啊,D盘time high doop map right map right下面有个staging sta呢,有一个O撇129111291107127是吧?哎,这个路径,然后下面有个它,哎,真有一个它,这是一个临时路径,我们先把它放在这对吧,哎,不要动,先放在这啊,目前是空的吧,好,往下走。嗯,往下走。走到这一到点,嗯,走。好,走到这儿,走到这儿之后往下一直行,你会发现这里面给你创建了一个招牌地。哎,提交每一个任务啊,它都有一个独一无二的招白D。哎,是为一直向这个集群提交了,好,那有了它之后先放在这儿啊,先放在这儿,然后往下走,哎,S job ID。哎,有这个照白D,那现在呢,你看一下目前这里面还是空的吧,哎,它只是获取到这个ID,那往下。再来又执行了一行之后,你看这是创建了一个新的路径,那这是一个什么路径呢?
10:07
他是在刚前刚才呃,刚才这个路径后面加上了一个招白地看到吗。是吧,哎,创建了一个它。那我现在这个pass有没有说真正的去执行呢,其实他还没有真实性,你看我说你还是没有啊,没有这个路径,别着急往下走。往下走,哎,他只是把这个路径啊啊这个写好了,但是还没有真正的去执行下下,哎这块呢,是一些设置信息啊,不用管,嗯,我直接给你找到后面吧,这个地方,这两个地方,哎需要重点关注一下啊,中间这块呢,你就可以快速过了,是一些缓存相关的处理。再往下。OK,到这到这呢,说叫copy and con file啊,也说拷贝或者配置一些相关信息,那我们进去看一下进来。进来之后呢,我们在这个地方打一个端点,好往下往下走,往下走。
11:03
到这到这之后我们进到这个upload resource,比如说看他提交哪些信息,哎,提交什么信息呢。嗯,再进来就说以内尔啊,这个不用看,下一步说uplo resource图啊,那进去看看呗。进来,进来之后这里面说job can。往下吧,往下走。哎,往下走,往下走,往下走,往下走,好,继续走,说submit job DR要提交的数据的路径啊,往下又尿了一个pass,这个pass是啥呀?哎,还是这个job吧,对吧,哎,这个照吧,那再往下找。往下。嗯,下面呢,是make一个dear啊。好,再往下。再往下。看一下看到没,哎,Make DR之后,这里面是不是就有了这个路径了,哎,我们进入到这个job对应的路径啊好,进来之后再往下,哎,这块呢,是创建这个照路径那往下走好继续往下走,往下走。
12:06
往下走。招,嗯,在招。嗯,再继续走啊,这个代码比较长啊,走好到这块看他说upload file,你说他要向这个集群提交一些内容,那他提交啥呢?哎,看这块这里面是有一个job架啊。哎,照本价,如果我们是集群模式的话,当前这个代码的价包是一定要上传到集群的,那他这块呢,通过这个客户端方式就可以提交给集群。那如果是本地呢,我要不要还提交这个加班呢。本地的话,由于我就是落O模式,这个价包它就在本地,那我就不需要提交啊,这是这块给大家说明这个含义啊。好,那往下走,嗯。往下。哎,好出来。那这块呢,就给大家说明一个事儿,说提交内容的时候啊,如果你是本地模式,不会提交价包,但是如果是集群模式,它是会提交的。
13:04
行往下,现在呢,这个路径已经有了。然后往下走,走到这儿。走到这呢,这是get job pass对吧?哎,这个路径应该现在是有了。有的往下诶到这个地方,这个地方呢,是一定要打断点的啊叫right split属于切片,哎,切片呢是一个非常重要的点,哎,我们会在下节课给大家讲这个切片,那这个切片呢,那里面的东西啊涉及的比较多,诶好直接下来,下来之后看它这个里面的变化,看到吗?立即就多了四个文件,那这四个文件呢,就是对应的切片信息,那这个切片信息啊,你自己看还看不了别人打开。打开之后啊,你会发现这里面哎,像夏落马似的,对吧,那是大概能看出来点东西什么,这个呃,Input的文件是hello.t那就对它进行一个切片对吧,嗯,好。这是切片信息,那行,那切片呢,我就是一个呃文件,那我切成几片呢?我这个文件多大,就是一个word吧,看看啊。
14:07
我看我一部的。对吧,哎,就是input word里面啊,就是一个非常小的一个文件啊好,我们回来非常小的文件,那肯定就要切一片,那切一片的话,你看这块干什么呢。叫Mr job con number map4,也就是说未来设置我map text的个数,你看是几个呢?点击叫map reduce job map4。设置map text的个数。那由谁来设置呢?把刚才你获取的这个切片个数复制了给他。哎,那这里面就说明了一个事儿,叫切片个数决定了你未来map task的一个个数。有时有几个切片,我未来就开几个ma。那这个很关键啊,这个很关键,往下走啊。然后这里面是打印日志,说number of split啊,这就等于一给你来一个控制台,我看啊。
15:05
这个有没有啊,行,我看一下这个吧,嗯,行,那下面的话呢,我们,嗯,继续往下走一行吧,嗯,这个工长啊,好,继续往下走一行。走,看到吗?哎,在空台上就打印了这个number of spli等于一。那切片个数就是一。你看这里面日志都能看到哈,那我们再切回来第八个再往下走,继续往下走。嗯,往下看到哪儿啊。咱们找一个地方。到这,哎,前面呢,这些都可以过,叫right job file to submit d,我们快速往下走,走到这吧。好到这了,到这了啊,到这之后呢,我们再来观察一下这个文件,这个目录下是不是有四个文件啊,哎,四个文件好,你看我执行走。Write完毕之后再来观察是不是多了两个文件,一个是drop上,另一个呢,是这个S交验文件,那看一下这里面有什么内容?
16:05
看一下是啥雅安客户端max缓存啊,什么大小。啊,你看到了是整个这个job运行需要的参数,它的设置默认值对吧,或者说你运行这个job,它的提交参数是什么。我这个job按照这个参数去进行执行任务。知道吗?哎,所有的参数都在这呢。提交了有餐盘啊,有切片信息,如果是集群模式,还有一个价包,这三样东西必须要记住。因为面试官会问,你看过源码吗?啊,那怎么能看证明你看过源码呢?啊,那这里面其中就是提交三样东西,一个是参L,一个是炸包,一个是切片信息,那就能证明,那否则的话,你说那个面试官我给你我给你说一下啊,我给你debug一下对吧?嗯,他没给你这个时间啊,他就是说那你看过这个源码,你看过啥呀。对吧,哎,你得说出个123来,那行,那这里面哎差麦漏提交,那再往下走往下走。
17:06
提交哎这块呢,就是客户端提交job信息,那看一下这个stage这个状态啊。好,下面往下往下再往下走,走到这再往下再走。好。回来往下到这儿,到这儿之后,当前这个stay状态进来的时候,是不是def DeFine啊,那现在把它制成什么,把它制成了running,比如说这个照吧,开始运行了,标记这个状态哈,那往下走出来,出来之后啊,就回到了我们最开始进来这个sum,然后下面是整个监控程序的一个代码。对吧,哎,就到这了,那到这儿之后啊,我们往下。嗯,你看好啊,看好,这里面目前还有东西吧,往下找主要是哎,这里面就是监控并打印照吧,相关信息,目前还有东西,但是我只要再往下照一行。
18:01
看到吗?哎,他就已经把这里面缓存的信息全部删除掉,比如说提交完毕,那我就直接删了,对吧?哎要is successful什么标记,哎还记得咱们这个。输出的结果当中有一个SUCSS标记嘛,啊对啊,这种呢,也是一个打标记位啊这种情况那再往下出来,最后呢,是在控台上打印退出啊结束,这就是整个程序的一个啊,那提交流程啊,咱们先分两步,第一步呢是主要讲的它的核心的提交流程,然后呢,第二块呢,才给大家这个讲这个这里面的核心内容切片。行,那这就是这个信息啊,当然了,你可以看到按照我这个文档当中这些核心步骤,比如说第一步呢。Wait for communication啊,然后submit对吧,Submit之后呢,建立连接,哎,网络连接,那连接这里面有两个客户端,一个呢是雅安客户端,一个呢是本地客户端,那之后提交提交代码啊,这里面会创建一个sta路径啊,那在这个路径里面,我们额外的还会创建一个job,哎,把这个job ID放在这个路径下面,然后呢,如果你是集群模式,我会将价包拷贝给对应的集群,如果是本地模式,那我就不考对应的这个价包。
19:16
那在之后我需要处理相关的这个切片信息,诶这个切片我没有深入去讲,一下子就过来了,过来之后他立即就在这个上面创建那个路径,后面加上了对应的芯片信息,再之后执行完这行代码之后,它又增加了代码运行的叉ML信息,最后呢是提交这个作业。哎,提交作业,那这个作业这个状态就由这个DeFine变成了这个running,你看这不就是正常这套流程吗?那下面呢,你看这个这波。对吧?Job提交流程源码with for comp,嗯,Job submit提交啊,两个成员,一个呢是local,一个是runner,然后这里面呢,我们会创建一个sta DR啊,如果是本地模式是file协议,如果集群模式ADS协议。
20:04
好啊,然后招ID对吧,哎,通过这个sta d加招ID就拼接成了对应的未来提交。哎,提交参数的一个路径,OK往下走,那下面这块呢,是调用切片信息,那获取到对应的这个切片。再来诶job的参麦相关信息,最后呢这块呢,如果是集群模式,还有一个加包,那就这点事,这就能证明你看过这个相关的这个啊源码啊。
我来说两句