大数据
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出现的次数在于用户是否配置,