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详解的更多相关文章

  1. 第37篇 Asp.Net源码解析(二)--详解HttpApplication

    这篇文章花了点时间,差点成烂到电脑里面,写的过程中有好几次修改,最终的这个版本也不是很满意,东西说的不够细,还需要认真的去看下源码才能有所体会,先这样吧,后面有时间把细节慢慢的再修改.顺便对于开发的学 ...

  2. JQuery 源码解析 · extend()详解

    前言:最近想重写一个dropdown插件,于是想到了使用jquey实现插件,于是重温了一波$.extend()的知识,然后总结了这篇笔记 正文: $.extend(src)  jQuery.exten ...

  3. Android源码下载方法详解

    转自:http://www.cnblogs.com/anakin/archive/2011/12/20/2295276.html Android源码下载方法详解 相信很多下载过内核的人都对这个很熟悉 ...

  4. 【Java】HashMap源码分析——常用方法详解

    上一篇介绍了HashMap的基本概念,这一篇着重介绍HasHMap中的一些常用方法:put()get()**resize()** 首先介绍resize()这个方法,在我看来这是HashMap中一个非常 ...

  5. 【转】ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解

    原文地址:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量—— ...

  6. Spring Boot源码中模块详解

    Spring Boot源码中模块详解 一.源码 spring boot2.1版本源码地址:https://github.com/spring-projects/spring-boot/tree/2.1 ...

  7. ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解

    简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...

  8. React源码 commit阶段详解

    转: React源码 commit阶段详解 点击进入React源码调试仓库. 当render阶段完成后,意味着在内存中构建的workInProgress树所有更新工作已经完成,这包括树中fiber节点 ...

  9. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...

  10. Android源码目录结构详解(转载)

    转自:http://blog.csdn.net/xiangjai/article/details/9012387 在学习Android的过程中,学习写应用还好,一开始不用管太多代码,直接调用函数就可以 ...

随机推荐

  1. How To Use ggplot2

    0. Preparation and Introduction ggplot2是R中新颖的数据可视化包,这得益于Leland Wilkinson在他的著作<The Grammar of Grap ...

  2. let 和 const 关键字

    看了阮老师的ES6入门再加上自己的一些理解整理出的学习笔记 let关键字 跟var相比,不会提升为全局变量,始终是块级作用域{} 注意点: 1: 不能在同一个块级作用域内声明同名变量 2: (如果当前 ...

  3. Java常用的八种排序算法与代码实现

    1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直 ...

  4. 每天一个linux命令(62):sh命令 /Linux中执行shell脚本的4种方法总结

    bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...

  5. UITableView grouped样式使用探索

    UITableView的style有plain和grouped两种样式,两种样式各有不同的风格和功能,plain样式已经封装好了悬停功能,gouped样式则为我们在区头和区尾在实际项目开发中需要我们选 ...

  6. _getch() 函数,应用于输入密码敲入回车前修改

    body,table { font-family: 微软雅黑; font-size: 10pt } table { border-collapse: collapse; border: solid g ...

  7. Json对象和Json字符串之间的转换

    json字符串转json对象,调用parse方法: var b='{"name":"2323","sex":"afasdf&quo ...

  8. xmlplus 组件设计系列之二 - 按钮

    除了图标以外,按钮也许是最简单的组件了,现在来看看如何定义按钮组件. 使用原生按钮组件 在 xmlplus 中,HTML 元素也以组件的方式存在.所以,你可以直接通过使用 button 标签或者 in ...

  9. 跨域资源共享CORS详解

    简介 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请 ...

  10. python3 selenium 如何处理异常情况

    使用场景: 1.元素只有在某一特定情况下才会出现 2.元素定位不到 使用方法: try: except exceptions.NoSuchElementException: 举例说明: # _._ c ...