开发者社区> 问答> 正文

溢出spill方法的实现的处理步骤是怎样的?

溢出spill方法的实现的处理步骤是怎样的?

展开
收起
游客fbdr25iajcjto 2021-12-06 21:47:28 680 0
1 条回答
写回答
取消 提交回答
  • spill方法的实现:

    如果bypassMergeSort为真,则调用spillToPartitiionFiles将内存中的数据溢出到分区文件。如果bypassMergeSort不为真,则调用spillToMergeableFile。

    spillToMergeableFile方法的处理步骤如下:

    1) 调用createTempShuffleBlock创建临时文件。

    2) 新建ShuffleWriteMetrics用于测量。

    3) 调用getDiskWriter方法创建DiskBlockObjectWriter。

    4) 调用destructiveSortedIterator方法对集合元素排序。

    5) 将集合内容写入临时文件。写入的时机有两个:

    集合遍历完的时候,执行flush。 遍历过程中,每当写入DiskBlockObjectWriter的元素个数(objectsWritten)达到批量序列化尺寸(serializerBatchSize)时,也会执行flush,然后重新创建DiskBlockObjectWriter。

    2021-12-06 21:48:17
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载