BlockManager架构原理源码解析

本篇博文的主要内容如下:
1. BlockManager运行实例
2. BlockManager原理流程图
3. BlockManager源码解析
一:BlockManager运行实例观察
从Application启动的角度来观察BlockManager

1.  在Application启动的时候还在SparkEnv中注册BlockManager以及MapOutputTracker,其中:
    a)  BlockManagerMaster: 对整个集群的Block数据进行管理的(Block是Spark处理数据的单位)
    b)  MapOutputTrackerMaster: 跟踪所有的Mapper的输出的。
2.  BlockManagerMasterEndpoint:本身是一个消息体,会负责通过远程消息通信的方式去管理所有的节点BlockManager。构造BlockManagerMaster的时候内部会构造BlockManagerMasterEndpoint.
3.  每启动一个ExecutorBackend(Executor是进程的对象,ExecutorBackend才是进程代表)都会实例化BlockManager并通过远程通信的方式注册给BlockManagerMaster;实质上是Executor中的BlockManager在启动的时候注册给了Driver上的BlockManagerMasterEndpoint。BlockManagerMasterEndpoint是Driver中的一个对象而已,无法对一个对象做HA,从集群的运营角度来讲,可以对进程做HA
4.  在实际表现出来的是BlockManagerMaster,其内部是通过BlockManagerMasterEndpoint具体去完成任务的。BlockManagerMaster只是Driver中的一个对象。
5.  MemoryStore:是BlockManager中专门负责内存数据存储和读写的类。它的存储单位是以block为单位的。
6.  DiskStore:是BlockManager中专门负责基于磁盘的数据存储和读写的类。
/**
 * Stores BlockManager blocks on disk.
 */
private[spark] class DiskStore(blockManager: BlockManager, diskManager: DiskBlockManager)
7.  DiskBlockManager:管理Logical Block(逻辑级别的,程序运行级别的) 与Disk上的Physical Block之间的映射关系并负责磁盘的文件的创建,读写等;
/**
 * Creates and maintains the logical mapping between logical blocks and physical on-disk
 * locations. By default, one block is mapped to one file with a name given by its BlockId.
 * However, it is also possible to have a block map to only a segment of a file, by calling
 * mapBlockToFileSegment().
 *
 * Block files are hashed among the directories listed in spark.local.dir (or in
 * SPARK_LOCAL_DIRS, if it's set).
 */

从job运行的角度来观察BlockManager:

BlockManagerInfo:   是Driver中为了管理所有ExecutorBackend中的BlockManager上面的所有元数据而设立的。
1.  首先通过MemoryStore来存储广播变量;
2.  在Driver中是通过BlockManagerInfo来管理集群中每个ExecutorBackend中的BlockManager中的元数据信息。
3.  当改变了具体的ExecutorBackend上的Block信息后就必须发消息给Driver中的BlocalManagerMaster来更新相应的BlockManagerInfo;
4.  当执行第二个Stage的时候,第二个Stage会向Driver中的MapOutputTrackMasterEndpoint发消息,请求上一个Stage中相应的输出,此时MapOutputTrackMaster会把上一个Stage的输出数据的元数据信息发送给当前请求的Stage.

BlockManager工作原理和运行机制简图:
BlockManager架构原理源码解析_第1张图片

总结: 本讲主要是对一些名词的解释,BlockManager的运行流程简单的过了一遍,但是名词的解释要重点掌握,这对于下一篇的源码解析的理解非常重要!,还有就是上述的图非常的重要,看源码解析的时候可以参照这张图,更好理解。

你可能感兴趣的:(Spark)