Spark-源码系列-SparkCore-Shuffle-Shuffle 管理器-ShuffleReader-ShuffleBlockFetcherIterator
一、概述
数据块的迭代器 ShuffleBlockFetcherIterator 可以从本地或远端获取数据块,本地数据块通过 BlockManager 对象进行获取;远端数据块通过数据块传输服务:BlockTransferService 服务来获取。
二、设计
2.1. 结构
2.1.1. 属性
三、初始化
ShuffleBlockFetcherIterator 是读取中间结果的关键。初始化 ShuffleBlockFetcherIterator 的时候会调用到 $initialize()$ 方法~
3.1. 划分本地与远程 Block
$partitionBlocksByFetchMode()$ 方法用于划分哪些 Block 从本地获取,哪些需要远程拉取。
1 | val remoteRequests = partitionBlocksByFetchMode( |
3.2. 将 FetchRequest 随机排序存入
1 | fetchRequests ++= Utils.randomize(remoteRequests) |
3.3. 远程请求 Block 中间结果
遍历 fetchRequests 中的所有FetchRequest,远程请求Block中间结果。
3.4. 获取本地 Block
4)调用fetchLocalBlocks获取本地Block。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker!
评论
ValineTwikoo