参考https://blog.csdn.net/beliefer/article/details/88665814
-
Spark存储(主要由BlockManager来完成)主要完成了写入数据块,如果需要备份数据块,则将数据块写入其他节点;读取数据块,如果当前节点不含有数据块,则从其他节点获取数据块;向Driver节点注册自身的BlockManager,以及上报其所管理的数据块信息。
-
Spark使用BlockInfoManager来管理当前节点所管理的数据块的元数据,维护了BlockId(数据块的唯一标识)到BlockInfo(数据块元数据)的映射关系。使用内存(MemoryStore)和磁盘(DiskStore)来存储数据块。
-
Spark使用BlockManagerMaster使Executor的BlockManager与Driver进行通信,向Driver注册自己,并上报数据块信息。Driver通过Executor BlockManager的BlockManagerSlaveEndpoint向Executor发出删除数据块/Rdd/Shuffle/Broadcast等数据。
-
Spark使用ShuffleClient来实现不同Executor BlockManager之间的通信。ShuffleClient中包含了一个TransportServer和一个用来创建client的TransportClientFactory,作为服务器和客户端实现Executor BlockManager之间的双向通信。
- SortShuffleManager
- IndexShuffleBlockResolver
- 3.3.1.1、BlockTransferService的初始化
- 3.3.1.2、Block的Rpc服务
- NettyBlockRpcServer提供上传,下载Block的Rpc服务
- 3.3.1.3、构造传输上下文你TransportContext
- 是由BlockTransferService的fetchBlocks, uploadBlock实现
- BlockTransferService
- DiskBlockObjectWriter