MapReduce完全过程(Shuffle)解析

零:知识储备
0.0MR框架中的节点分类
JobTracker:管理TaskTracker,对外接受请求
TaskTracker:处理请求,分配MapTask和Reduce Tesk任务

0.0切片
作用对象:Block的逻辑大小
切片的意义:逻辑划分数据大小,以便确定任务数量,一个切片对应一个Mapper
切片标准:按照Block大小的n倍(n 可为分数)来切分,避免跨Block切片,默认是Split=Block=128M(此时如果Block 10M 小文件 那么Split也是10M)
注意:
如果文件不可切分(如压缩文件),就将一整个文件作为一个切片处理。
如果文件可以切分,并且  FileSize/SplitSize < = 1.1 就将余下的的文件内容拼接在上一个切片中来处理
例如:520M的可切分文件,在默认SpiltSize=128M的时候,对其进行切分,第一切片128M,第二切片128M,第三切片128M,第四切片128M,最后还剩下8M的文件大小,此时将这余下的文件内容拼接在最后一个切片中(第四切片),此时第四切片大小为128+8=136M大小。如果FileSize/SplitSize > 1.1则单独作为一个切片。
如果Split大小与Block大小没有n倍关系,有可能一个Split要对应两个Block,由于两个block不一定在同一机器节点上,此时可能会由于网络波动而影响执行效率

0.1缓存区
本质:字节数组,环形缓冲区
作用:缓存MapTask计算数据
默认大小:100M内存
溢写阈值:0.8,一旦缓冲区数据总量达到缓冲区数据大小的80%,开始对缓冲数据进行溢写,溢写的同时,MapTask还会将数据写入缓冲区。
溢写过程:缓冲区触及溢写阈值后,将其中的的计算数据写入磁盘生产溢写文件(spill),单整体的计算任务MapTask结束后,会将所有溢写文件合并(merge)为FinalOut文件输出给Reduce。
注意:为何溢写阈值为0.8,而不是1。
由于数据写入缓存区(内存)比较快,数据写出到磁盘比较慢,有可能会出现速度不一致的情况,旧的数据还没完全写出去,新的数据又写进来,数据可能被覆盖或者读写数据发生阻塞。预留0.2的内存空间,以便新数据有空间写入,同时磁盘读取缓存区的尾部数据写入到溢写文件




二:数据获取资源调度任务分配

二:Map数据处理
三:Reduce数据处理
全部评论

相关推荐

09-18 20:41
门头沟学院 Java
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
09-14 20:51
四川大学 Java
慢热的鲸鱼在学习:985加粗就行了,第二个项目来不及准备也没事,省的写了问你你还不会。你只需准备面试八股和项目场景,剩下的交给985。即使面不过也没事,面试经验是最重要的,你现在不缺时间
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务