MapReduce原理深入理解1----shuff过程
MapReduce原理深入理解
1、主要原理
(1)Map任务的数量由切片splite决定;Reduce的数量默认是一个,但是可以手动设置
(2)MapReduce的输入和输出是基于HDFS的文件;
切片splite使用类TestInputFormat将文件中的数据转化为<k1,v1>格式,
此时的k1表示数据的偏移量offset,v1表示的是行数据;
<k1,v1>进入Map,Map将其构造成<k2.v2>,
此时的k2表示需要处理的数据(单词/班级/性别...),v2表示为1,
Map通过context.write将<k2.v2>发送出去;
(3)相同的k2的所有v2,构成[k2,{v2,...}],{v2,...}表示迭代器;
进入Reduce的时候,数据还是<k,v>格式,此时的v比较特殊,为迭代器;
经过Reduce将数据构造成<k3,v3>格式,
Reduce使用类TextOutputFormat将<k3.v3>转换为文件输出到HDFS
2、MapReduce内的shuffle过程
inputsplite:输入切片; partition, sort and splite to disk:隔断,分区和排序
buffer in memory:缓冲区; fetch:拿来,取来
merge:合并
MapReduce是基于磁盘IO的框架,所以Map端的输出存在磁盘里,
若直接写进磁盘里,速度会很慢,所以存在磁盘之前,会加入一个缓冲区(环形),缓冲区的默认大小为100M;
因此会先写入缓冲区,当缓冲区达到80%,会溢出写进磁盘,此时会进行分区和排序,最后再合并
分区的数量=Reduce的数量,Reduce的数量决定分区的数量
理解:怎么分区的?
对Map输出的K,会去求K的Hash值,然后与分区的数量进行取余,每个余数对应着每个分区
分类:
Hadoop
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通