00:00
好,接下来呢,我们简单回顾一下主讲内容啊,昨天讲呢。是从KY6开始是吧。一步的一步的慢啊这一块那正好我。能够从整体给大家回顾一下。这几种也。一步的不骂他。短时间内。首先看一下这个。它有这么几种实现类和。以及我们自定义的一部分嘛,那么还是啊,最后采取提问的方式,那么。从切片的角度,他们都是如何切的?袋子不骂的,不这么接的。阿恒写了的。
01:00
默认是按照块的大小书写,对吧,而且每一个文件是不是独立。清楚了吧,嗯。好,那KY6慢。你谁呀?你还以为前桌呢?原来同桌是前桌。我切片没问题的。随便一不一样。呀,那就完了呗,这么简单对不对,切片就是还是按照块角摸块上角切对吧?啊然后呢,这个。啊,文件,每个文件独立芯片是这意思吧,就OK了啊,那下面下一个online input什么后。
02:00
啊行节是吧,这可以设置是这意思吧。那下一个是。直播间。不错啊,挺好,这个记得非常好。那同桌自定义也不怎么骂的,怎么行?那下面呢,是按照这个key和value啊。就是说他可以不动慢的,它的K是什么类型,Value是什么类型。
03:08
OK,那下面这个K。分什么的。都是太子是吧?那这个K是怎么来的呢?都是这么来的。这分割符切割完之后是我第一个啊第一个第一列相当于是吧,啊第一个单词。那后面的话是所有的内行的内容,那就是Y对吧,OK。呃,后主诶。一步怎么办了?啊,红姐啊。啥?
04:04
跟谁不骂的一样。嗯,那可是什么?电量对吧,啊,那出来吧,那外头呢。是吧,这一行内容啊。OK,那同桌。这很多大净落。啊,后主自定义模的话呢,我们这个是怎么定义的什么类型对吧。Keep吗?文件那个路径啊,名称啊。Y6呢?来吧,哎,这文件那个内容啊。每天多简单了,这个还记不住。那行吧。呃,下面呢,是回顾一下这个自定义的这个案例哈,嗯。
05:01
我再给大家啊,重新报一下,看一看这到底怎么,为什么去这么做啊。这第八个你要整不会我就天天给你整。这是加油自动打断点,打断点的原则就是你关心什么,你在哪打。啊,你不关心,那就别打啊,你比如说你上这儿看。卡打了一六没有啥意义啊啊没有任何意义啊,我们关心什么呢?关心他的record这里面怎么找的。最核心的其实是这位对吧。Nice斯地白,那么这个nice t白是被谁掉了?里面有一个。就这地方,哎,就这料子啊,要清楚。那我先问大家一个问题。这个NICE100。不可以,那一会一直返回false可以吗?
06:00
也不可以对吧,哎,那不不能一直返回错误,也不能返回false。那什么情况下返回处呢?应该把。只要能读到数,是不是就得往下往下走啊,是不是得反数啊?哎,读不到数了,相当于这个文件读没了,那是不是得返回。报上。作业之后,现在我开第八个。右键右键。一下子就来到了这个nice KY啊,到这了,到这之后呢,往下走。现在呢,这个is是to对吧,To快手。那么这一块鼻子块这一块是。是为了干啥?是不是就目的是将这个小文件也就弯点T。
07:03
转换到是不是这个最终输出的这个V里面去啊。对吧,那么问你V。他是要想往里面添值,他只给你提供了一个set的API。在的API里面要求传输的参数是。那么你就最终你要将这个慢点test转换成B。对吧,然后再加上八塞到这里面去。给中转一下,如果它是支持这个流,是不是可以这个,比如说做一个输入流,把这文件写进去是不是更好了,那就是输入流这面打开这个文件,我。输入流来了FS,然后之后是拷贝到这里就完事了。我们想的是直接一步到位,但是呢,原因就是这个set,它只这个Y只给你提供了一个set方法。而且size的要求是。所以说那我们的一切操作,哎。
08:01
都是围绕这去做了,围绕这去做,那什么呢?需要这个buffer,那buffer怎么来呢?哎,需要将这个in。也是F里面的硫。那么Fi怎么来呢?可以打开这个。图片的路径。对吧,啊,那下面这个咱们怎么来呢。通过机电可以反推出来。那就说要是从正规的套路来来的话,就是获取这个FSD项,然后呢,获取主流,那将输流里的内容拷贝到八分。那八分里的数据,哎,塞到里面。目的就干这件事,那么这是value流啊,比较难一点,那么这个K呢,往里重装那就更简单了。我们封装的就是这个past。Pass,全路径加上这个文件名称。及时就来。
09:00
一设置完事,所以说轻松将这个k value啊KV搞定。这里面大家唯一有一个地方不太理解什么呢?就是这个。他为什么这地方制成?这地方为什么有的时候返回处,有的回,有的时候返回放。原因就在我刚才说的这一块。他一直把不出我合不合适。读到初一的时候,我要跑回处。没有读到书的时候,我要把它放水结束。到这看没断点啊,往下走。封装完了is progress等于false。啊,等于这地方返回数,相当于读到数之后,然。那为什么读完之后我就将它制成false了呢?你想想。我是不是已经将这个万这个文件整个都读过来了。我这个输流把它整个文件全读到这个B里面去。
10:01
并到这个V里面。全都走了,没有意义了,不完了,那也说这个map task是不是已经运行完了。因为Y是对应一个节点的。那这个万对应一个切片,我就开一个map test,那下面to的这个切片,我是不是还额外又开一个map map对角。那我three的时候是又开一个。相当于这里面我一共开了三个。所以说有的同学会晕。嗯,因为以往呢,我们所有的车都拍一个。是这个原因啊好,那找到这儿之后。就来到这儿了啊,就来到这了,来到这之后,你因为你读到了数据,所以你往下一走。起来的。那卖的话,那你现在当然可以进去了。
11:02
出去。那就到这了,所以说最终就到了这个map里面去处理你对应的业务逻辑,把这一个万文件往出写。他先写到管理区里面去。啊,并没有直接到这个video里面去。啊,他会等所有的这个。呃,Ma全部处理完之后,等待这个reduce来读。现在呢,相当于是一个ma。把书籍准备好之后写到这了。然后接下来呢,开启另一个麦。再放到这。再开启另一个map台,再放在这,然后reduce,最终啊。来分别去读他们的。这地方大家晕在哪呢?因为我们现在这个是稳定运行。么,这个不是整个集群运行,你会觉得,哎,这个map感觉好像是串行运行。
12:02
啊,你在调的过程中,你会感觉是串行运行。哎,所以说你现在会晕,觉得他开完之后,我又开他又开他。即使正常情况下,你要是集群环境运行,它是并行运行。否则的话,你要是所有的外都是串性运行,那这个效率那。多了,那大数据也就现在。离开。所以说那好。直接出去。那数据又来到这,那来到这,这一次你看这个一是不是变成Bo了,相当于在这个map里面,哎,读完之后map结束了,它又返回来了。但是反回来这个刚才这个镜片的文件是不是已经都没了。哎,读没了,那还有意义吗?那是不是就该放了?画上啊,结束这个。花啊。结束完之后,是不是该走这了?
13:05
然后你往下走。知道了,哎。看啊行。就结束了,哎,这个麦已经结束了。他已经结束了。那你在全程运行。又来到这儿了。来到这这你看诶怎么又变成数了呢。原因是他已经从。重新创建了一个。泡泡的。在哪建呢?它相当于又创建了一个recorder,又去读另一个切片,所以说你才会觉得,哎,这地方这个is price怎么就变成true了呢?其实是另一个对象。刚才那个已经翻篇了,另一个map,所以说那他接下来又开始读了。那读的文件是谁呢?
14:02
只兔啊。它那个是先读的那个兔哈。那个字典这来。大一往下读,往下往下读。读的话还找。说完之后又来到了我们这个。这。到这一下是不是就进到这了啊,静姐你可以看一下。好,又来到这儿。那要写出去了,写出去之后呢,你往下走。那么下次再执行一次,该到十位了吧?就到这A变成处,那就这个文件是谁呢。十位了吧,嗯,对。第三个文件。是这么走的啊,好,再往下。
15:02
所以说这个标记。读到了文件,那我就要把它只能放出,因为整个文件已经全部读完了,下一次呢,就不需要再再读了。下面全注意情况哈,快一点。之后你看最后他才到这个reduce。最终把所有点输出去,那有时有同学呢,这块呢,不太明白,那输出出去的时候,为什么他写了一一个文件,呃。啊,写了一个外文件出去,然后又写一个多文件出去,又写一个文件出去。就能放在一起呢,以前的时候我们是按行写的。现在呢,是啊。文件写的跟谁有关系呢?Second file out懂么?因为你的second输出的这个格式已经变化了,你看你的类啊。输出是不是已经将它设置成c five的了?这个方式已经变了,所以说那就按照他的方式去输出,包括今天我们会自己去自定义这个奥特曼了。
16:04
那你的体会会更不一样,我们完全可以控制它输出到哪,以什么形式输出出去。都是由我们来控制。那这个呢,是按照他这个规则去走的。默认的是test out。好,那来到这呢,我们就做出了啊,直接出去。结束整个这个怎么。对,这个要会啊,一定要会这个你爸爸。分的去理解。那好,那下面呢,是回顾一下这个麦就是工作流程,这个流程呢,那更要会了。首先还是一个待处理的文件啊,200兆。经过前面的这个提交之前,对这个文件进行分析啊,一分析正好需要两。片对吧,啊,零到一百二十八一片,128~200兆一片。
17:03
那把这个文件信息啊进行提交,提交呢,最主要的是这么三个文件,一个是切片信息。一个是加班,还有一个是。照点馒头配置文件信息。还到这个集群上啊。集群上呢,有这个雅恩。里面的进行统一的调配协调,那么这个resource呢,就会根据这个任务开启一个叫Mr application master。那他根据这个切片信息啊。根据一看,你这正好是两个切片,那我就需要启动两个map。那就启动两个map,一个。分别一个处理处理零到128,一个处理128~200。上下。那么。啊,你要想读取这个文件,那你就有得有这个input吧,那默认的这个input呢,就是test input。
18:08
他一次读取一行,一行一行去读取。当然了,这个以后的话,我们可以自己自定义,这我们就自定义一个小文件的一个。那个是一次读取一个整个文件。那那我们就按照这个默认的来处理,那就是一次读取一行,读取一行之后封装成KV。那这个PV哎,就会传到这个map里面去。想一想那个外循环,只要这面next ky6有值,它就会进到那个map。那进到这个map里面,最终它是要往出写。写到哪儿呢?欢迎。反正鞋。那往这里写,哎,它这里面呢,右侧存的是数据,也是KV数据,左侧存的是对应这个数据的原数据。
19:05
那这个整个房源缓冲区默认大小是100兆。而且默认的这个反向溢写这个值呢,是80%。什么意思?也就是说这里面的值。存到80%的时候,他就要反向一些。先把这些内容。写到纸卡里面去。啊,毒手,那剩下的这里面是不是还剩10%。哎,那这个期间他是不是还可以再往里面去写数据啊。不会让这个反正群停下。运行效率更高一些。啊。那这里面存的数据啊。这个相当于这个左侧这边是原数据,右侧呢是这个时差的数据,就是PV。那原数据呢,其实就是标记它的。其什么?就能算出这个K有多长。存在什么位置上啊。包括他是哪一个分区的。
20:02
尤其是先是get part。去拿上去。啊,那么这个呢,就是对这个数据呢,所有的数据都打上了这个分区的标签。那后面还有一个排序。排序是什么时候排序呢?哎,是一写之前排序。到达80%的时候,他要对这个数据进行一个排。他排序排的可不是后面这个数据啊。他排的是这个根据索引数据进行。出去读出这个值之后看。好。这是排序。排完序之后,那最终要把这个数据存储到。那罗盘呢,由于你在里面是80%的时候啊,100兆的80%,那你可能认为是80兆啊,其实呢,这里面它还有一些附带的信息。
21:00
根本达不到80号的时候,他就会一次一些。可理解出大量的这个文件。那好,那可能多吃一些。那一写的文件呢,其实里面都是这种。没有经过合并的KV。那最后呢,要执行word。对这些一写的文件再进行一个规并排。你这个一个一个的散文件,这肯定不行。最终一定要形成一个大的、有序的。而且呢,是按照分区去。因为你不按照分期是没有任何意义的。因为最终你这这个数据要放到一个。就是一这个数据要放大也就12。他俩根本就不会汇合。啊,所以说针对这个分区内的数据进行。那下面这个合并还没有讲,后面再说。下面这个过程啊。
22:00
啊,这个是map test2的过程啊,跟上面MAP1是一样的。大家往下看。阶段。Radio阶段呢,首先哎得是卖所有的map,把数据全部都准备好。准备好放到这个对应的石板上。而且呢,是按照分区。同时,这个分区内部的数据是有序的。那它放好之后,也就是说所有的map test任务完成之后。开始要启动radio test。那启动多少个?由这个分居数决定,然后最终由m Mr IP master,它来决定我到底开在哪一个节点上去开这个这个。由他来决定啊。那他一看,正好你前面是分了两个区。
23:02
而且呢,你在这个驱动里面也设置了number啊,比如说V2。开两个之后,那也就开一。他负责分区零里面的数据,那他就考分区零的数据。别的数据不好。那T2呢,它只考分区一的数据。我就处理你的。这样呢,效率会非常非常高啊。OK,那拷贝过来。之后要对这个数据进行。也是你多个这个,呃,有序的小文件这么写啊,我要把你最终合成一个大的游戏的。那这个过程就是一个规定排序的一个过程。就变成一个大的,OK。然后再将这里面相同P的内容。调用一次比对的方法一定是相同的K。
24:02
不同的,那你就单独进一次。就单独进。最终把所有的文件。输出的。外面这个跟主这一块啊,后面再说哈,就说。输出到里面去。啊。最后。对应的分区的文件。这就结束了。这就是整个这个map和reduce的一个过程啊,呃,这块呢,后面还会多次的去去说,因为这个组件呢,我还没有讲全,讲完之后还会给大家再详细的说啊。同时要。跟一下源码啊,所有的过程。左边的码啊。
我来说两句