spill方法的实现:
如果bypassMergeSort为真,则调用spillToPartitiionFiles将内存中的数据溢出到分区文件。如果bypassMergeSort不为真,则调用spillToMergeableFile。
spillToMergeableFile方法的处理步骤如下:
1) 调用createTempShuffleBlock创建临时文件。
2) 新建ShuffleWriteMetrics用于测量。
3) 调用getDiskWriter方法创建DiskBlockObjectWriter。
4) 调用destructiveSortedIterator方法对集合元素排序。
5) 将集合内容写入临时文件。写入的时机有两个:
集合遍历完的时候,执行flush。 遍历过程中,每当写入DiskBlockObjectWriter的元素个数(objectsWritten)达到批量序列化尺寸(serializerBatchSize)时,也会执行flush,然后重新创建DiskBlockObjectWriter。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。