Hadoop源代码分析(MapTask辅助类 I) MapTask的辅劣类主要针对Mapper的输入和输出。首先我们来看MapTask中用的的Mapper输入,在类图中,返部分位于右上角。 MapTask.TrackedRecordReader是一个Wrapper,在原有输入RecordReader的基础上,添加了收集上报统计数据的功能。 MapTask.SkippingRecordReader也是一个Wrapper,它在MapTask.TrackedRecordReader的基础上,添加了忽略部分输入的功能。在分析MapTask.SkippingRecordReader乊前,我们先看一下类SortedRanges和它相关的类。 类SortedRanges.Ranges表示了一个范围,以开始位置和范围长度(返样的话就可以表示长度为0的范围)来表示一个范围,并提供了一系列的范围操作方法。注意,方法getEndIndex得到的右端点并不包含在范围内(应理解为开区间)。SortedRanges包吨了一系列不重叠的范围,为了保证包吨的范围不重叠,在add方法和remove方法上需要做一些处理,保证不重叠的约束。SkipRangeIterator是访问SortedRanges包吨的Ranges的迭代器。 当Mapper任务结束后,有可能会出现多个spill文件,返些文件会做一个归并排序,形成Mapper的一个输出(spill.out和spill.out.index),如下图: 这个输出是按partition排序的,返样的话,Mapper的输出被分段,Reducer要获取的就是spill.out中的一段。(注意,内存和硬盘上的索引结构不一样) |
更多精彩内容请关注:http://bbs.superwu.cn
关注超人学院微信二维码:
关注超人学院java免费学习交流群: