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. Intellij IDEA2016 注册码

    网上大多数关于Intellij IDEA2016的注册码多是同一个,如下 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1l ...

  2. Java面试题04-final关键字详解

    Java面试题04-final关键字详解 本篇博客将会讨论java中final关键字的含义,以及final用在什么地方,感觉看书总会有一些模糊,而且解释的不是很清楚,在此做个总结,以备准备面试的时候查 ...

  3. C++迭代器 iterator【转】

    1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型.(1) 每种容器类型都定义了自己的迭代器类型,如vector:vector<int>::iterator iter ...

  4. 使用spring利用HandlerExceptionResolver实现全局异常捕获

    最近一直没有时间更新是因为一直在更新自己使用的框架. 之后会慢慢带来对之前使用的spring+mvc+mybatis的优化. 会使用一些新的特性,实现一些新的功能. 我会尽量分离业务,封装好再拿出来. ...

  5. B/S 和 C/S两种架构

    一: 什么是B/S(Browser/Server)架构? 应用系统完全放在应用服务器上, 并通过应用服务器同数据库服务器进行通信,系统界面 是通过浏览器来展现的. T是浏览器模式. 优点: 1)客户端 ...

  6. spring_boot攻略1.1-hello SpringBoot

    交流账号:2318645572 说明: 开发工具:eclipse 开发系统:windows 7 开发规范:maven项目 注意:按照我说的方式做下去 1.导包:pom.xml <project ...

  7. Android -- Android下的NDK开发(一)

    1,NDK是什么?为什么要进行NDK开发? NDK:Native Development Kit.Android应用运行在Dalvik虚拟机中.NDK允许开发人员使用本地代码语言(例如C和C++)实现 ...

  8. Hadoop之HDFS原理及文件上传下载源码分析(上)

    HDFS原理 首先说明下,hadoop的各种搭建方式不再介绍,相信各位玩hadoop的同学随便都能搭出来. 楼主的环境: 操作系统:Ubuntu 15.10 hadoop版本:2.7.3 HA:否(随 ...

  9. Linux -atime、mtime、ctime

    Linux中,文件都有其自身的atime.mtime.ctime,在不同的命令下,各时间发生相应的改变.下面,我们来简单的介绍一下: atime (access time):表示最后一次访问文件或目录 ...

  10. ASP.NET MVC4 微信公众号开发之网页授权(二):通过公众号AppID(应用ID)和AppSecret(应用密钥)取得网页授权openid

    ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境 通过了上一篇文章我们已经搭建好了基础开发大环境,现在打开开发环境这里我用的是 vs2013,通过如下方式: 拼接请求链接重定向到 ...