collect方法
collect方法序列化kv对存储到buffer里面.
- 首先是各种检查,检查key,value的class
- 接下来检查分区数量设置是否符合要求
- 接下检查BufferRemaining是否小于0,小于0就该腾地方了.
- 就是 startSpill();
sortAndSpill方法
在方法里找一下sort.四个参数,m是meta的意思,就是实际先对meta排序的.
sorter.sort(MapOutputBuffer.this, mstart, mend, reporter);
再找一下write.写到哪里去了,写到partitionOut这里面.
writer = new Writer<K, V>(job, partitionOut, keyClass, valClass, codec,
spilledRecordsCounter);
mergeParts()方法
找一下merger…
//The output stream for the final single output file
FSDataOutputStream finalOut = rfs.create(finalOutputFile, true, 4096);
```