MR的运行机制
MR的运行机制其实就是从Input到output的一个过程,再这其中涉及到了两个阶段,Map阶段和Reduce阶段,中间还有一个Shuffle过程。再map阶段呢,就是讲数据已K,V形式读取进来,然后再通过环形缓冲区,然后分区,排序,归并。reduce阶段呢 拉取map阶段的数据,再进行归并排序,然后再已K,V的形式写出去,可以写到下一个map或者是HDFS中。map阶段涉及分区,reduce阶段涉及分组。
具体运行机制如下:
Mapper阶段
1、Maptask通过Inputformat的createRecordReader()的方法调用LineRecordReader中的nextkey()和nextValue()方法,从Split读取数据。
2、读取的数据通过Mapper的逻辑类,转换为K,V类型,通过outputCollector将k,v序列化后存入带阻塞的环形缓冲区中
3、环形缓冲区默认是100M,存入数据时会记录偏移量,当写入80%开始溢出(这个地方参数可以设置)
4、溢出前会开启spiller线程,通过Partitioner.getPartition(k,v)进行分区,同时通过k1.compareTo(k2)方法进行排序,分区内是有序的
5、溢出可能多次,最少一次也可以通过局部聚合和Combiner,先聚合在溢出
6、溢出的排序的数据会通过Merger组件进行归并排序,写出到本地磁盘中,写出的文件是SequenceFile
Reduce阶段
1、Reducetask通过nodeManager提供的辅助shuffle服务</