【源码解析】BlockManager详解
1 Block管理模块的组件和功能
- BlockManager:BlockManager源码解析
- Driver和Executor都会创建
- Block的put、get和remove等操作的实际执行者
BlockManagerMaster:BlockManagerMaster源码解析
- 作为BlockManagerMasterEndpoint的代理类,隐藏实体类
- 执行BlockManager中注册等操作
- BlockManagerMasterEndpoint:BlockManagerMasterEndpoint源码解析
- 响应远程调用的实体类
- 维护BlockManager的元数据
- 拥有移除RDD、获取Block和更新BlockInfo等功能
- BlockManagerSlaveEndpoint:BlockManagerSlaveEndpoint源码解析
- Executor端响应远程调用的类
- 内部实际调用BlockManager执行具体操作
- BlockManagerInfo: BlockManagerInfo源码解析
- 维护着每个BlockManager中所管理的Block
- 持有BlockManagerSlaveEndpoint的实例
- BlockManagerId:BlockManagerId源码解析
- 作为每个BlockManager的唯一标识
- StorageLevel: StorageLevel源码解析
- 用来描述Block的存储级别(存储位置、是否序列化和副本数)
- MemoryStore
- 内存读写实际执行者
- DiskStore
- 磁盘读写实际执行者
2 整体框架

3 我的思考
在一开始分析BlockManager(BM)、BlockManagerMaster(BMM)、BlockManagerMasterEndpoint(BMME)和BlockManagerSlaveEndpoint(BMSE)时我就感觉它们之间的功能定义和关系不是特别的清晰。
1)BMM作为BMME的代理类,隐藏了BMME的实现,由BMME来完成实际响应远程调用的动作,这个还是比较清晰的,因为BMME维护着BlockManager的元数据信息,由它来完成信息的增删查这个是完全没有问题的。
2)我的疑惑就在于BlockManager的定位是什么?
首先从类设计原则来看,类的功能单一且清晰是比较重要的,因为这样可以清楚地看到类的定位
- 完成实际数据的put、get和remove?这个在BM源码中我们可以看到putBytes、getBytes等方法,这是没有问题的
- BlockManager向Driver注册等
那么BlockManager的定位就是处理一切跟Block读写等有关的工作和注册等工作
3)但是我想来想去这个BlockManager就是处理Slave端的实际Block读写,那么应该叫做BlockManagerSlave更贴切,但是作为一个优秀的开源项目,不应该会出现这样的问题。那么可能是我的理解问题,于是我又进行下面的思考:
Driver和Executor都有BlockManager,那么Driver端BlockManager的作用仅仅是维护Executor端的BlockManager元数据的话,那么Driver根本就没必要创建BlockManager,使用BlockManagerMaster就可以。所以很可能设计目的就是这样的:
- BlockManager的设计目的是作为slave端的实际block管理类
- Driver端的BlockManager实际由两部分功能组成:
- 拥有Slave端BlockManager实际操作Block的功能
- 用BlockManagerMaster来实现Slave端所有BlockManager元数据的维护
【源码解析】BlockManager详解的更多相关文章
- 第37篇 Asp.Net源码解析(二)--详解HttpApplication
这篇文章花了点时间,差点成烂到电脑里面,写的过程中有好几次修改,最终的这个版本也不是很满意,东西说的不够细,还需要认真的去看下源码才能有所体会,先这样吧,后面有时间把细节慢慢的再修改.顺便对于开发的学 ...
- JQuery 源码解析 · extend()详解
前言:最近想重写一个dropdown插件,于是想到了使用jquey实现插件,于是重温了一波$.extend()的知识,然后总结了这篇笔记 正文: $.extend(src) jQuery.exten ...
- Android源码下载方法详解
转自:http://www.cnblogs.com/anakin/archive/2011/12/20/2295276.html Android源码下载方法详解 相信很多下载过内核的人都对这个很熟悉 ...
- 【Java】HashMap源码分析——常用方法详解
上一篇介绍了HashMap的基本概念,这一篇着重介绍HasHMap中的一些常用方法:put()get()**resize()** 首先介绍resize()这个方法,在我看来这是HashMap中一个非常 ...
- 【转】ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
原文地址:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量—— ...
- Spring Boot源码中模块详解
Spring Boot源码中模块详解 一.源码 spring boot2.1版本源码地址:https://github.com/spring-projects/spring-boot/tree/2.1 ...
- ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...
- React源码 commit阶段详解
转: React源码 commit阶段详解 点击进入React源码调试仓库. 当render阶段完成后,意味着在内存中构建的workInProgress树所有更新工作已经完成,这包括树中fiber节点 ...
- vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)
前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...
- Android源码目录结构详解(转载)
转自:http://blog.csdn.net/xiangjai/article/details/9012387 在学习Android的过程中,学习写应用还好,一开始不用管太多代码,直接调用函数就可以 ...
随机推荐
- Java 基础知识总结 2
11.Java常用类: StringBuffer StringBuffer 是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明之后则不可以改变,改变的只是其内 ...
- Spring Boot 学习笔记--整合Redis
1.新建Spring Boot项目 添加spring-boot-starter-data-redis依赖 <dependency> <groupId>org.springfra ...
- 和我一步步部署 kubernetes 集群
和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...
- 利用原生JS判断组合键
<script type="text/javascript"> var isAlt = 0; var isEnt = 0; document.onkeydown = f ...
- Keepalived高可用集群实践
(1)实践的硬件环境准备 准备4台物理服务器或者4台VM虚拟机,其中两台用来做Keepalived服务器,两台做web测试站点 HOSTNAME I P 解 释 lb01 10.0.0.7 K ...
- POJ 3294 出现在至少K个字符串中的子串
在掌握POJ 2774(两个串求最长公共子串)以及对Height数组分组后,本题还是容易想出思路的. 首先用字符集外的不同字符连接所有串,这是为了防止两个后缀在比较时超过某个字符串的分界.二分子串的长 ...
- IIS环境下部署项目
1.环境部署 1.1安装IIS7 进入控制面板,选择"程序和功能",进入如下页面后,点击"Turn Windows features on or off". 找 ...
- linux系统中.bashrc的妙用
一.有何作用 .bashrc - The individual per-interactive-shell startup file. .bashrc - 主要保存个人的个性化设置,如命令别名.路径等 ...
- SublimeText3编译JavaScript
这个操作很简单总的来说分为两步,1.安装Node.js 2.添加SublimeText3 JS编译系统 首先我们去官网下载node.js https://nodejs.org/en/ 然后安装 验证 ...
- iOS开发tips-UINavigationBar的切换
概述 在iOS系统中,如果控制器是以push方式进行管理的话,那么事实上多个控制器是共享的同一个导航栏.当然iOS系统的设计无可厚非,但是国内的应用经常会遇到很多个性的设计,就比如说A push到 B ...