BlockManager原理剖析与源码分析

来源:互联网 发布:销售数据统计软件 编辑:程序博客网 时间:2024/06/06 06:55

这里写图片描述

  • BlockManager 会运行在 driver 和 Executor 上面,在 driver 上面的 BlockManager
    是负责管理整个集群所有 Executor 中的 BlockManager,BlockManager 本身也是 Master-Slave
    结构的,所谓Master-Slave 结构就是一切的调度和工作都是由 Master 去触发的,Slave本身就是专注于干活的,而
    Executor 在启动的时候,一定会实例化 BlockManager。
  • 基于应用程序的 AppId 去初始化 BlockManager,这个 initialize 方法也会启动
    BlockTransferService 和 ShuffleClient,同时注册 BlockManagerMaster,启动
    BlockManagerWorker endpoint,当 Executor 实例化的时候会通过
    BlockManager.initialize 来实例化 Executor 上的 BlockManager 并且会创建
    BlockManagerSlaveEndpoint 这个消息循环体来接受 Driver 中的 BlockManagerMaster
    发过来的指令,例如删除 Block 的指令。 当 BlockManagerSlaveEndpoint 实例化后,Executor 上的
    BlockManager 需要向 Driver 上的 BlockManagerMasterEndpoint 注册

  • 发送消息到 BlockManagerSlaveEndpoint

  • BlockManagerMasterEndpoint 接受到 Executor 上的注册信息并进行处理,每一个 BlockManager 都会对应一个 BlockManagerInfo,然后通过 executorId 看看能不能找到
    BlockManagerId,BlockManagerMaster 包含了集群中整个 BlockManager
    注册的信息。经过了这几个步骤后完成了注册的工作,这跟 Spark-Shell 启动时的日志信息是一致的。

  • BlockManagerMaster 只有一个 dropFromMemory 是指当我们内存不够的话,我们尝试释放一些内存给要使用的应用程序。

原创粉丝点击