00:00
好,接下来我们看一下第四章雅源码的一个解析,那雅安的工作机制呢,以前我们讲过对吧?在讲基础的时候,那我们稍微来回顾一下,看看这个雅安他到底干了哪些事儿好。点开。啊,这里面有两个角色哈,一个呢是客户端,另一个是延resource manager,也就是集群,好,那在客户端他做了一件什么事呢?他在客户端的最后一行代码里面有一个wait for complication这方法,他呢会进行一个任务的提交,那这里面我跟集群打交道,所以说他创建的是一个雅恩runner对吧?好,那他提交他干什么事呢?首先说呀,哎,老大,我要运行一个任务,诶产生一个FID。之后呢,这个老大说行,你要提交任务是吧,哎,你把你要提交的资源哎给我啊,放在我给你的路径上,那行,那小弟呢,乖乖的把对应的资料诶放到对应的这个提交目录上,那这里面有什么呢?有对应的切片,有参L,还有对应的架包啊这三样东西,那这个切片呢,是管你未来要开启多少个ma test。
01:05
那job叉ML呢,是管着你这个任务未来按照哪个参数进行运行好,那这个价包呢,就是正常的代码了啊,你在本地模式它不需要提交价包,但是在集群模式它是一定要提交价包啊运行程序的啊,那他提交完毕之后,他会告诉老大说,诶老大我已经提交完了对不对,那我得运行我这个任务的老大呀,也就说Mr master他把这个发给他。对吧,让他帮他去运行行。那在基金端呢,就会产生对应的一个任务,对吧,那除了你这一个客户端之外,它是不是还有多个客户端呢?比如说你除了这个黄色的,还有绿色的,什么这个蓝色的,对吧?这么多客户端都会向集群提交任务,那他会把这个任务呢,放到对应的这个任务队列里面进行,等待后续执行好,那这个期间正好有这么一个note manager,他有支援,那就把这个任务给领过来了,他准备开始执行。
02:01
那它执行任务呢,所有的任务都是先创建容器,诶那这里面有CPU,有RAM啊,有网络IO对吧,磁盘等等都有,然后呢,他就会开启对应的m Mr a master,那他呢,就会去诶之前的这个提交路径上去读取资源,那主要读的就是这个切片信息。他读到它之后,哦,他一发现说我可能要开启两个map t,那行,那我要把这个事儿是不是还得提交给对应的对队列啊,哎,那这个队列呢,就会给他准备两个对应的map test。哎,开始执行对吧,嗯,行,那好,那这个容器升级完之后呢,开始执行map test发送命令,那其实这个任务的执行是由哪个进程来完成的呢?哎,是由这个雅恩child啊,由他来帮我们去执行后续的内容。OK吧,啊,这个角色要知道哈,这是执行具体任务的,是甲的行,那这个map test正常运行,运行完之后呢,把数据持久化到磁盘,等待reduce端来拉取这样一个过程。
03:04
那好,那map阶段结束之后,APP master他又去申请要开启对应的reduce test啊,那同样也是在雅N啊这个进程里面进行执行。OK,那正常执行完毕之后,那释放自己。那这个过程就结束了。那好,那下面让大家去看源码,看源码之前还是老规矩,哎,大家看一看这个方法方面的一个调用哈,那这个程序怎么执行的啊,我们要找到一个word count的对吧?哎,它的最后一行代码是不是就是一个wait for complic,然后提交提交任务,提交任务呢,要提交切片,提交配置信息,诶,然后提交任务。那提交任务它调用什么方法呢?提交任务之前他要封装一个命令,封装什么命令呢?封装这么一个命令叫并加va,然后一堆配置参数,加上一个application master,比如说你要启动哪一个任务,我是不是要启动RA application master。
04:02
因为我要运行这个任务嘛,所以说要启动这个进程啊,那启动之前我要给他创建,创建完之后,然后调用对应的提交方法,通过客户端要发给远程的雅恩啊,也就是resource manager,那是不是又进行了一个跨进程的通讯呢?哎,那老规矩,那就得有对方的这个服务端接收客户端的请求,那是不是方法是一样的。对不对,哎,接收完之后是不是就开始要运行应的这个Mr master对吧?哎,好,那接下来那就开始要开启对应的MR。那开启之后,那就是他正常的一个初始化,哎初始化,那初始化的时候呢,它启动一个dispat,哎,创建了一个,因为它是整个任务的老大,对不对,他管理的对应的ma task reduce task啊好。那它初始化完毕之后,那下面呢,就开始启动对应的这个mrb master啊,然后启动服务啊,启动启动最终它会把这个任务是不是要提交给哎谁呀,是不是还是给提交给雅安的队列里面,哎,仍然是把它这个下面的map test任务啊re test任务提交到对应的这个呃,队列当中,那这里面那队列里面执行这个任务由谁来执行呢?由这个雅恩child。
05:18
由它来执行,那它这里面启动位方法,哎启动RA,那run的话呢,那你是map阶段,你运行的就是map task,你是reduce阶段,我启动的就是reduce task,然后这里面哎执行新的API,新的API,然后map run reduce run,那就跟我们以前看到的这个map test源码和reduce源码是不是就闭环了。哎,就是这样一套过程哈,那行,那这里面呢,我们还是啊一点点大家去看哈,那首先呢,先把这个上面这个客户端提交这个。任务啊,把它呢给截取出来好吧。OK。然后呢,我们再把这个截出来,比如说雅安源码干了什么事。再提回来,哎,你后续开源码的时候也这么去看,这样呢就会非常轻松啊好,那拿过来,那接下来我们来到了这个,呃,一个word count,任何一个都行,然后看到它最后一行代码叫wait for complic啊点开点开之后。
06:13
放大一下,那这里面我们之前也带大家讲过,对吧,任务的提交的源码,那是不是走这个sum呀,啊进来submit之后,上面这个呢,是这个呃,状态的查询新旧API的一个改变,是不是这个connect connect里面是不是有雅安客户端,有local客户端呢?哎,好,那下面这行代码是不是接下来往下走,走到这的时候是不是真正的去提交任务好提交。对吧,来到这儿啊,快速回忆一下哈,那这块呢,是不是对这个路径一个检查呀,判断这个以往的路径是这个上传的路径是否存在,如果存在是不是直接抛异常啊,哎,干这个事儿,然后下面呢,是获取这个任务的ID啊往下走。嗯,走这块呢,其实是创建的一个提交路径,比如说你要提交哪些资源,你的资本地资源在什么位置啊把这个路径创好,创好之后是不是走的这个切片呢?哎,切片规则,那切片规则呢,默认的是走这个file input,那当然还可以采用这个combine file input这种方式啊,不同的切片规则,那再往下走啊往下走。
07:11
往下走,走到这个地方,这个地方是不是像你那个提交路径上啊,写这个写入对应的差麦配置文件啊,对吧?哎,提交配置文件啊,然后再往下这块,比如说上面准备工作做好之后,是不是就开始进行要提交了,哎,那好,那提交呗,啊进来进来之后你发现这是一个,哎是类似一个协接口协议,那你得怎么办,是不是得找它的时现类啊,Ctrl out加B。那这里面你看一个logo,一个雅恩,那我们选择哪一个,哎,选择雅N对吧,进来进来之后,那进来之后我们干了什么事对吧?哎,看这里面一个呢,是创建application,提交相应的上下文环境,那下面这个呢,下面这个是提交你这个上下文相关内容,那是不是得先创建,然后进行一个提交啊,那我们先来看一下创建。那创建的话进来进来之后往下看啊往下看。
08:01
看他干了什么事啊,往下走走,走到这个地方。哎,这个地方很关键啊,他说set up,那就是master,对吧,它的一个命令,比如说你要提交任务给,其实我提交的是一个命令,让这个resource manager帮我去执行这个命令,然后启动一个mrp master。啊好,那看一下,那这个命令它到底是什么呢?看一下这块,这里面有一个参数看啊创建是一个集合,那集合里面它拼接的各种参数啊,并加va Java home对吧,这些内容,然后你往下你看这个它还拼接了别的内容啊往下轴哎往下轴MR什么呃,Admin obence啊各种参数,你看这上面是不是各种参数的配置啊,最终是不是放在这里面了,你看这里面。看这里面。行,那放进去,嗯,你看上面配置完之后,然后给他,他之后呢,又给他对吧?啊,这里面参数啊,它除了这些参数之外,还有这些参数啊,继续往下走啊,继续添加参数,继续添加参数,直到有个这个东西叫application master class,你说真正你要运行哪一个程序好,你看一下它是谁。
09:11
看到了吗?哎,这里面就是maps v two啊,APP mrp master,就是真正你这个job的老大啊,要一他那好那回来。回到这,那现在呢,这个命令你看最终就封装到这个参数里面,是不是要发给对应的resource manager啊好,那回来哈,回退回退再回退回退到这个地方啊,再回退一下。对吧,这还是创建,哎,你说上面这块呢,是创建啊,那在这个创建过程当中,其实我是封装了一个命令啊,也其实你看我们以往执行程序是不是也是加Y,然后加。啊,然后对应的架包,然后全利名啊,那我是不是就把这个任务启动起来了,那现在我刚才这里面其实就是把这个命令行啊封装好之后,由这个resource manager来启动对应里面的任务啊这个事儿哈,那行,那你把这个东西给发给对方啊,那行那就发呗,来点啊点点之后呢,继续发,嗯,客户端,然后发送发送,发送之后发现是抽象的,那怎么样回退。
10:07
回退,再到了这CTRL加D。那这里面呢,一个是雅安client,一个是resource啊,那哪一个是不是一个雅呢啊雅安客户端实现类就可以了,那发送过来之后啊,也是相当于把它发过来。那继续往下走。往下找。往下找。走哪儿呢?位置哈,这里面有一个RM client,然后submit application,比如说由这个RM client客户端提交给对应的对方对吧,那其实这块呢,那对方呃,相当于走到这儿了啊,相当于是我这个客户端对吧?这块要发送给对方,那对方是不是得有接收啊,那好,那对方接收你看没ctrl out加B,你看谁谁能接收,那这里面是不是有一个client I'm service。
11:00
相当于是接收各种客户端的一个服务吧,对吧,啊拿过来啊过去,那过去之后呢,那后续这块呢,就是对这个请求进行相关的一个处理,那这个请求呢,赋给了一个叫submit application contest啊它这里面从它获取了对应的上下文环境,因为我刚才我们是不是创建了上下文环境,上下文环境里面是不是封装了对应的它呀这个。是不是把它封装过去了,那我是不是把这里面,我这边1GET,是不是就把这个拿过来了,拿过来之后我是不是就准备要执行这个mrp master啊,哎,就是这样一个过程哈,行,那拿到它。然后他之后往下看啊,往下看。往下看啊,你看这里面跟队列相关的各种事情,对吧?哎,队列相关各种事情,然后把它这个各种,嗯,Set啊set你看这里面啊,Set这个队列啊,往这个队列里面进行一个相关的添加啊好,那这里面相当于是我放到队列之之后,那后续的事儿我要干什么事儿。你回来你看啊,现在呢,这边呢,已经把这个,哎,你这个看上下文环境发送过来了,上下文的环境里面封装的就是这个命令,那接下来是不是他要执行这个命令,启动对应的M2MASTER对吧?哎,那现在呢,我们就来看一下启动完这个APP普master它之后他干了什么事。
12:18
对不对,哎,那好,那我们把下面这个再截一下。比如说接下来我们要看一下Mr master,它又做了哪些事,那怎么找呢?CTRL加N,然后MR。PA master OK,过来,过来之后你要想看它怎么运行的,那是不是得查找它对应的may方法呀,啊,对吧,那没方法里面往下走,哎,你看一下他干了什么事呢。这个地方说in and start application application master对吧,那你就初始化对应的安排这个master,那进呗,啊进来进来之后往下看,往下看,诶看到这个地方。这地方有一个APP master in,还有一个APP start,对吧?哎,对它进行一个初始化和这个启动,那先看一下初始化干了什么事,初始化里面,然后这里面走走走走到这,这有一个service in ne,相当于是服务的一个启动。
13:14
好,那再来,那在到这里面之后,你会发现啊,这是一个抽象的服务,那怎么抽象的服务你就得ctrl out加B。哎,这么多,那这么多当中选择哪一个呢?往下找。到。找到自己rapp master对应的服务初始化,OK进来进来之后呢,这里面你看啊,首先进入眼帘就这个。创建了一个PA,哎,相当于是一个任务调度器,因为Mr master,它是不是整个任务的调度的器的老大,对不对,哎是那要把它创建好,那这就是数字化要做的事,你再回来。那这个APP master把这个调度器初始化完之后,是不是接下来就开始启动了,我看它启动干了什么事。
14:00
对吧,哎,启动,那这里面有一个service start啊,那你再点,你点之后发现仍然是抽象的,那怎么办?哎回退回来。坎二的加B,哎,那由谁来实现呢?仍然是由这个m RA master哈,哎,还他自己那这一面过来,过来之后看他干了什么事,对吧,往下走。Create job,嗯,往下找啊找。走,走到最后。走到最后这块,哎,它开始启动对应的造势。你看他启动,他干了什么事?对吧,来启动,启动之后这里有一个dispat对吧,哎,调度器,然后get even handler,然后handler啊start,那继续往下走呗,对吧,来继续往下走,那这里面点看到了,诶发现不行啊,走不通了,对吧,走不通回来回来之后CTRL2加B。哎,这样去找找谁呢,这里面有一个。
15:03
Gene event handler,哎,他走的是他啊,走的是这个,那看这里面干了什么事。你看这里面各种是不是队列相关的事情,这。队列,尤其这块看到吗?将你传进来这个handle德ler这个事件event是不是放到了一个event队列里面,那大家猜这个队列谁队列?哎,其实它就是盐的调度器啊,队列吗?盐的队列。那你这个任务是不是这个m Mr mini master,把对应的我要启动的m map test reduce text和任务是不是提交到了对应的雅N的调度器里面,然后准备开始执行。是这样过程吗?对吧?哎,对,那它就是这样一个过程,那回到这儿,比如说现在呢,我们就把这个任务提交到队列,那接下来在这个队列里面就要执行后续的任务,那这里的任务呢,有map task,有对应的reduce task,那么把这个再接下来。那回来那怎么找呢?CTRL加N,那仍然是雅n child对吧,然后这里面,然后CTRLF,那我这里面查找may方法程序的入口。
16:08
那找到这,找到这之后呢,往下看啊,往下找,这里面有很多代码,往下看往下找。找到这个地方,这有一个task final啊也是这个最终运行,你看运行嘛,对不对,运行程序,那运行对应的是什么程序呢?你往这儿一选中ctrl all加B。它有两个实现类,一个呢是map task,一个是reduce task,那我们先看一下map task它是怎么走的,对吧?来进来进来之后呢,他先判断了一下,说当前啊是不是map test,然后进行执行,那这个地方有个参数要注意一下。Map t数分多个阶段的,其中包括有map阶段,还有对应的short阶段。Map阶段是不是相当于是我在map方法里面处的处理的一些事情,对吧,那上个阶段呢,相当于是我是不是这个map方法出来之后,进入到环形缓冲区,然后在环形缓冲区里面进行一个默认的排序。
17:05
还记得吧?啊,或者贵宾排序对不对?哎,行,那好,你看这里面有个什么事啊,这是呃,一道比较经典的面试题哈,Get number reduce task,如果说你reduce阶段等于零什么意思?是不是就是把所有的这个你资源的比例都给谁了,是不是都给map阶段了什么意思?也就说你如果没有reduce阶段,相当于我数据进入到map方法之后,是不是就map阶段结束就结束了,没有后续的S阶段?比如说map阶段后面不是map方法出来之后,是不是进入到还原缓冲区啊,如果说你没有reduce阶段,这个还原缓冲区会走吗?他这个意思是不是不会走啊啊,他告诉你这个事儿,那好,那如果说会走还原缓冲区的话,那我后续的这个资源比例又是怎么样的呢?Map阶段占你总共的多少?是66.7%呀。啊,那这个有什么用。
18:01
诶,大家还记得吧,执行word count程序的时候,是不是有一个map那个进度条啊,他说啊,会先走到比如说66.7,然后再往下走,走到这个100%,然后才会开启旅究阶段,还有印象吗?你稍微回忆象,那这个会方便你去定位问题的位置。什么意思,如果你这个map执行的时候没有执行到这个零点,嗯,这个66.7%,也是执行到50%,假如说啊。那说明这个代码出错在什么位置,是不是出错,你在这个map方法里面啊,那如果说你这个66.7%已经结束了,已经进入到这个so的排序阶段,然后出问题了,那说明是不是我排序阶段我的资源不够,导致我任务出问题。那你就可以定位为后续的代码逻辑问题对不对,比如说跟你前面这个map逻辑没有问题,那是我资源方面的去调优啊,方便你去定位bug的哈,所以说这个开源码就有这个好处啊,稍微了解一下啊,这是给大家额外赠送的,那下面我们继续往下看啊,回到正题,比如说雅安child,它到底怎么执行任务的,往下找。
19:05
找到这个地方,这地方有一个run new map对吧?哎,Run map,然后进来吧,哎,执行新API,新API里面他干了什么事呢?往下看往下看走啊,继续往下走啊,找到这个地方。Map run对吧,Map要运行了,那好那点。这是谁呀?看一下这是谁呀?这是不是个map啊,哎,这个咱们讲what count的时候,第一个程序是不是就它呀,你看这里面set up up,然后中间map,然后你看上面。对吧,Map set up上下文环境非常熟悉了吧,哎,讲到这儿之后,就真正的跟你那个word count里面map map map t吧,是不是就闭环了。哎,这里面知道哈,比如说那后续这个内容我就不讲了,因为之前我们讲过对应的map t源码,Review t源码啊好我们再回来。再回来。再回再回,比如说刚才啊,这个地方我们的时现类呢,走的是这个,呃,Map task,那下面CTRL2加B,我们来看一下reduce task OK吧,那reduce task往下看,这里面有copy阶段,S阶段,Radio阶段,是不是这段源码之前我们也看过呀,哎,往下走。
20:15
走。走到哪儿了?走到。这哎仍然是run new啊这个reducer对吧,写一篇进来,进来之后呢,往下看。往下走。这个地方reducer.run啊就说run这个reducer好进来,那进来之后你再看一下是不是reduce点。Java对吧?哎,然后你看这个代码熟不熟。Set up clearup,然后reduce对应的方法,用户需要重写,对吧?这就是整个过程。啊,那也说新债啊,新债完事之后,比如说整个我们这个源码啊,这个ADS啊,MA6S雅恩,哎,整个这个这些内容就完全就要打通了。
21:00
啊,打通了啊,之前还也给大家留过作业,说这个雅跟这个MA6这个任务这块任务啊闭环了,那前面ADPS对吧?啊,然后跟后面这个输出数据到ADPS,那这块你要用一张大图把它们都给画在一起。那不知道大家这个完没完成是吧,嗯,行,那现在呢,就是延安的病的源码哈。
我来说两句