大数据
Map-output源码分析
*MapTask
*runNewMapper
(output)
*NewOutputCollector 攻破输出
partitioner分区器 分区数量的2种情况: 1分区号都是0,都在一个reduce中,都在同一个分区
>1 getPartitioner 进入JobContextImpl实现类
*JobContextImpl
*HashPartitioner Hash映射方式:散列,破坏数据的原有特征
取numReduce模的数量
collector容器 进入createSortingCollector方法 --准备一个对象
*createSortingCollector
*MapOutBuffer
输出初始化环节
1字节数组默认100M,环形缓冲区 80%溢写 向磁盘中写入数据,当超过80%,发生溢写,将数据移出,另外的20%可以继续写入数据
2 sorter排序器 默认QuickSort(快速排序),将数据的乱序排有序,排序之后产生IO,写出n个文件
3 comperator比较器 用户可以配置 进入getOutputKeyCompartor
*getOutputKeyCompartor
--在MapTask任务中,分两步取比较用户有无配置比较器,默认是K的比较器
4 combiner处理本Map的数据量,在溢写80%时,
--combiner出现的次数在于用户是否配置,如果用户配置combiner,则压缩大小,然后去IO,写成小文件。如果小文件数量>combiner设置的数量/3,则再次触发combiner
5 spillTread溢写线程 异步 80%与20%

本文详细分析了MapReduce中Map-output的源码,包括MapTask的执行流程,NewOutputCollector如何处理输出,HashPartitioner的分区策略,以及Map阶段的溢写、排序、合并和Combiner的使用。通过对MapTask内部机制的探讨,揭示了MapReduce如何优化数据处理,减少网络IO,提升处理效率。
最低0.47元/天 解锁文章
3015

被折叠的 条评论
为什么被折叠?



