Spark BlockManager 和 CacheManager 的基本原理

本贴最后更新于 2340 天前,其中的信息可能已经物是人非

BlockManager

BlockManager 是 Spark 中用来管理运行时分布式数据(缓存数据,shuffle 数据,广播变量,磁盘,内存数据)的读写和存储。
e69c6b92bdf741a3b3d25968ced705dc-image.png

1、BlockManager 是一个 Master-slaves 的主从结构,分为 BlockManagerMaster(位于 Driver)和 BlockManagerWorker(位于 Executor),
当 SparkContext 初始化的时候以及 Executor 启动就会进行 BlockManager 的初始化,每个节点都会有 BlockManager。

2、当 Executor 实例化的时候会通过 BlockManager.initialize 来实例化 Executor 上的 BlockManager,同时创建 BlockManagerSlaveEndpoint 这个消息循环体来接收 Driver 中的 BlockManagerMaster 发过来的指令,且会向 Driver 的 BlockManagerMaster 进行注册,同时报告所有的 block 信息,此时 BlockManagerMaster 会为其创建一个 BlockManagerInfo,这个 BlockManagerInfo 会管理对应的 BlockManager 的元数据信息,他们之间通过心跳连接不断地对信息进行更新,每当有对应的 Block 被操作的时候,此信息都会发生改变。

3、BlockManager 中管理了 Block 数据,其中包括组件 DiskStore:负责磁盘数据的读写,MemoryStore:负责内存数据的读写BlockTransferService:初始化传输服务给它的blockdatamanager可以用于获取本地数据块或传输本地数据块

4、不论是什么过程,只要涉及到数据的读写的操作都会使用到 BlockManager,如 Shuffle 的数据读写,写入磁盘,从磁盘拉取,都是 Block Manager 中的 DiskStore 进行操作。

CacheManager

CacheManager 是 Spark 中用来管理缓存数据的。同样的涉及到数据的管理,CacheManager 依然会借助 BlockManager 进行数据的操作。Cache 的作用就是提高效率。当我们获取某个数据的时候首先去缓存中拿,缓存中没有才会进行相应数据的计算操作。而 CacheManager 管理了我们从缓存中获取数据的流程。
e5cfe41f27f4455aa4bea8b91599a5ad-image.png

数据查询流程

1、当某个 Task 需要一个 RDD 的时候,会首先从缓存中去查询这个 RDD 是否被计算过且缓存过,
2、如果 RDD 的缓存级别部位 NONE 则说明被缓存过,此时 CacheManager 就会调用 BlockManager 从内存和磁盘中查询这个 RDD,
3、查询的时候 BlockManager 会先从本地查看 getLocal,否则从远程获取 getRemote,
4、当我们发现找不到数据的时候可能是数据丢失了,则去 CheckPoint 中查找,checkPoint 保证数据的容错,防止数据丢失。
5、如果还找不到,只能根据 RDD 的血统来源,进行重新计算,此时会将计算好的数据交由 Block Manager 进行持久化。
6、当然如果第一步发现这个数据未被持久化过,就会直接进行 RDD 的计算。

  • CacheManager
    1 引用
  • BlockManager
    1 引用
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 550 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
rzx
此生最怕深情被辜负,最怕兄弟成陌路。对世界充满善意,同时又充满深深的恨意,我渴望天降甘霖福泽众生,又渴望灭世洪水重创世纪。 广州