|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大致分为copysort、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

 

 

posted on   yanqi_vip  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示