|NO.Z.00034|——————————|BigDataEnd|——|Hadoop&MapReduce.V07|——|Hadoop.v07|MapReduce原理剖析之切片机制源码解读|ReduceTask工作机制|
一、切片机制源码阅读
~~~ [MapReduce原理剖析之切片机制源码解读]
~~~ [MapReduce原理剖析之ReduceTask工作机制]


### --- MapTask并行度是不是越多越好呢?
~~~ 默认就是128M;
~~~ 答案不是,如果一个文件仅仅比128M大一点点也被当成一个split来对待,而不是多个split.
~~~ MR框架在并行运算的同时也会消耗更多资源,并行度越高资源消耗也越高,
~~~ 假设129M文件分为两个分片,一个是128M,一个是1M;
~~~ 对于1M的切片的Maptask来说,太浪费资源。
~~~ 129M的文件在Hdfs存储的时候会不会切成两块?
二、ReduceTask 工作机制

### --- ReduceTask工作机制
~~~ Reduce大致分为copy、sort、reduce三个阶段,重点在前两个阶段。
~~~ copy阶段包含一个eventFetcher来获取已完成的map列表,由Fetcher线程去copy数据,
~~~ 在此过程中会启动两个merge线程,分别为inMemoryMerger和onDiskMerger,
~~~ 分别将内存中的数据merge到磁盘和将磁盘中的数据进行merge。
~~~ 待数据copy完成之后,copy阶段就完成了,开始进行sort阶段,
~~~ sort阶段主要是执行finalMerge操作,纯粹的sort阶段,完成之后就是reduce阶段,
~~~ 调用用户定义的reduce函数进行处理。
### --- 详细步骤
~~~ Copy阶段,简单地拉取数据。Reduce进程启动一些数据copy线程(Fetcher),
~~~ 通过HTTP方式请求maptask获取属于自己的文件。
~~~ Merge阶段。这里的merge如map端的merge动作,只是数组中存放的是不同map端copy来的数值。
~~~ Copy过来的数据会先放入内存缓冲区中,这里的缓冲区大小要比map端的更为灵活。
~~~ # merge有三种形式:内存到内存;内存到磁盘;磁盘到磁盘。
~~~ 默认情况下第一种形式不启用。当内存中的数据量到达一定阈值,就启动内存到磁盘的merge。
~~~ 与map 端类似,这也是溢写的过程,这个过程中如果你设置有Combiner,
~~~ 也是会启用的,然后在磁盘中生成了众多的溢写文件。
~~~ 第二种merge方式一直在运行,直到没有map端的数据时才结束,
~~~ 然后启动第三种磁盘到磁盘的merge方式生成最终的文件。
~~~ 合并排序。把分散的数据合并成一个大的数据后,还会再对合并后的数据排序。
~~~ 对排序后的键值对调用reduce方法,键相等的键值对调用一次reduce方法,
~~~ 每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到HDFS文件中。
三、ReduceTask并行度
### --- ReduceTask并行度
~~~ educeTask的并行度同样影响整个Job的执行并发度和执行效率,
~~~ 但与MapTask的并发数由切片数决定不同,ReduceTask数量的决定是可以直接手动设置:
~~~ 默认值是1,手动设置为4
job.setNumReduceTasks(4);
### --- 注意事项
~~~ ReduceTask=0,表示没有Reduce阶段,输出文件数和MapTask数量保持一致;
~~~ ReduceTask数量不设置默认就是一个,输出文件数量为1个;
~~~ 如果数据分布不均匀,可能在Reduce阶段产生倾斜;
三、 Shuffle机制
### --- Shuffle机制
~~~ map阶段处理的数据如何传递给reduce阶段,
~~~ 是MapReduce框架中最关键的一个流程,这个流程就叫shuffle。
~~~ shuffle: 洗牌、发牌——(核心机制:数据分区,排序,分组,combine,合并等过程)


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通