00:00
好,上张图啊,我们是讲了一下这个MAP6的工作流程对吧?哎,详细的介绍了一下,那现在呢,我们再来单拎出来这个过程当中的这个suffer这个字啊,也就说map方法之后,Reduce方法之前这段过程啊,这段过程呢,无论在面试还是开发的时候啊,都会是成为重点内容哈,那我们再详细剖析一下,如果面试官问说你给我讲讲这个suffer吧,那你上来第一句话就是suffer呢,是从麦方法之后,Reduce方法之前这段混洗的过程啊,一般叫洗牌嘛,你像这个打过谱都知道,洗牌的话呢,就是整体打乱啊,那这里面可以进行排序啊,分区啊啊,还可以进行合并压缩啊等等很多事情,那这个过程我们一般叫suffer,也叫混洗。行,那来看一下这个流程吧。啊,从map方法之后开始讲了哈,那我们map之前的啊,就不在这讲了啊,你要说suffer的话,你就别把前里面说了,人家说问你map流,Map就是流程,那你说前面如果没说卖流程,直接问S,那就是卖方法之后,那卖方法出来之后,首先进入到哪里呢?哎,首先呢,这里面是环原缓程序对吧?哎,其实最准确的来说,它先是进入到一个get partan方法啊,标记数据是哪一个分区。
01:15
那后面我会大家看这个源码啊,这个分区先让它这个数据打上这个分区的编号,因为后续这里面数据啊,都是得按照分区去处理,因为未来这个,呃,分区一的数据和分区二的数据,它会进入到不同的reduce里面,你放在一起没有意义,嗯,是这个意思啊,行,那标记数据是哪一个分区之后,那就进入到这个环形缓冲区,那环形缓冲区多大呢?默认100兆,那在这里面它是左侧存索引,右侧存数据。那它到达80%的时候进行反向溢血,诶溢血的原因是因为它到达80%进行反应溢血,因为它留给了溢血的时间,不至于这个等待啊,让这个工在这个环氧缓冲区啊,一直高效的运转。
02:03
让它利用率呢更高一些啊,是从这个角度去说的。好,那下面呢,那在溢写之前对吧,数据已经到达溢血这个峰值了,80%,溢写之前他要对数据进行一个排序,那这里排序的手段叫快排。记住哈,排序的手段叫快排,那对谁排呢?对的是K的索引排。一定是索引啊索引。那按照什么顺序排呢?记住先记住是按照字典顺序排,这么三个说法啊,首先再总结一下。排序的手段,快排按对谁排,对K的索引排,对K的索引按照什么顺序排?按照字典顺序排。那排下去之后,那比如说第一次溢血。对吧,啊,一写会产生两个文件,一个呢是一写的index文件,一个是一写的真正的这个落地的文件啊,一个索引啊,索引文件啊,啊这两块。
03:00
那这个commander什么作用,Commander是可选的啊,后面会说如在这种。呃,聚合操作吧,啊的场景下,它是可以使用的,那使用的话呢,就是让你传输到reduce端的数据量小了,比如说爱的硅谷一,爱的硅谷一那你正常应该传两份传过去,但是呢,我现在呢就传一个艾特硅谷二,那我就传一份。就搞定了,那我传输的数据量小,那我效率不就高了吗。OK,那这是第二次一起。对吧,哎,第二次溢血,那其实呢,有第N次溢血。啊,DN增减数据量很多啊,然后呢,对这个数据呢,进行一个归并排序啊归并排序那有没有同学说这个海哥呀,你这个还原缓冲区域100兆,那你传过来的数据是128兆,那你最多也就进行两次溢血,有没有这种疑问?啊,但是你要注意啊,这个还原缓冲区100兆,它可不是只存储这个数据啊,它是不是还有一半的是这个谁呀原数据啊。啊,那不光纯储金,所以说这100兆里面,它没有真正的100兆用来存它啊,所以说这里面会溢血多次啊,这个要知道一下。
04:07
那对这个一写文件呢,进行一个归并,归并然后后面归并完之后的数据,它还可以进行command,进行第二次command啊,你只要把这command设置好之后,那这两第一次第二次它自动会帮你去完成啊。行,那在这个commander之后,记住还可以设置它相应的压缩。啊,压缩,为什么要进行压缩呢?想一想。压缩之后,因为你这是map阶段,这是radio阶段,那我压缩完之后,数据量从原来这么大,突然间变成这么小了,那我在网络上传输的内容是不是就小了,那我传输的效率不就高了吗?啊,这是一个优化的手段哈,后面也会说那再来那之后呢,数据呢,是写到这个磁盘上。写到磁盘上之后,哎,它是按照分区这个写的哈,然后等待radio端来拉取啊,这个拉字很重要啊,是别人来拉。
05:00
那map,嗯,Map task2也是同样道理,那map task准备完毕之后,那下一步就是reduce task拉取自己指定分区的数据,那拉的话呢,也要注意它呢,拉过来之后先放到哪里呢?它是先尝试着放到内存里面。如果这个内存不够的情况下,它会溢写到磁盘上。嗯,这要注意哈,好。对吧,内存不够往磁盘上放。那不管你放在内存当中数据,还是磁盘当中数据,我最终都要干什么?我要进行一次大排序啊。进行一次大排序,那也是要规定。把你这里的数据拿过来,这里数据拿过来规定规定完之后写,嗯,这个还有一次分组,还还可以进行分组啊,分组的话就是相同的KK相同嘛,对吧,哎,可相同的,然后进入到对应的reduce方法。那每每一次执行review方法,它都是处理的是内部K是相同的,那它里的存储结构还记得吗?是K,然后Y6V1 V2 V3是不是放到一个集合里面,那对这个集合里的数据你可以进行相应的加减乘除都可以。
06:12
那再往下走,哎,那就结束了哈,这里面说REDUCE2啊,处理流程跟REDUCE1呢是一模一样的啊,就不再过多说明了哈,这是杀机制。
我来说两句