Application 启动的时候:
1. 会在 SparkEnv 中实例化 BlockManagerMaster 和 MapOutputTracker,其中
(a) BlockManagerMaster: 对整个集群的 Block 数据进行管理的
(b) MapoutputTrackerMaster:跟踪所有的 Mapper 的输出的。
2. BlockManagerMasterEndpoint 本身是一个消息体,会负责通过远程消息通信的方式去管理所有节点的 BlockManager
3. 每启动一个 ExecutorBackend 都会实例化 BlockManager 并通过远程通信的方式注册给 BlockManagerMaster。实质上是 Executor 中的 BlockManager 在启动的时候注册给了Driver 上的 BlockManagerMasterEndpoint
4. MemoryStore 是 BlockManager 中专门负责内存数据存储和读写的类
5. DiskStore 是 BlockManager 中专门负责基于磁盘的数据存储和读写的类
6. DiskBlockManager: 管理 Logical Block 与Disk 上的 Physical Block 之间的映射关系并负责磁盘的文件的创建、读写等
Job 运行的时候:
1. 首先通过 MemoryStore 来存储广播变量
2. 在 Driver 中是通过 BlockManagerInfo 来管理集群中的每个 ExecutorBackend 中的 BlockManager 中的元数据信息
3. 当改变了具体的 ExecutorBackend 上的 Block信息后就必须发消息给 Driver 中的 BlockManagerMaster 来更新相应的 BlockManagerInfo
4. 当执行第二个 Stage 的时候,第二个 Stage 会向 Driver 中的 MapOutputTrackerMasterEndpoint 发消息请求上一个 Stage 中相应的输出,此时 MapOutputTrackerMaster 会把上一个 Stage 的输出数据的元数据信息发送给当前请求的 Stage