spark源码阅读-存储体系1(概述)

简单来讲,spark存储体系市各个Driver和Excutor实例中的BlockManager所组成的。但是从一个整体出发,把各个结点的BlockManager看程存储体系的一部分,那么存储体系还包含更多衍生的内容,如块传输服务,map任务输出跟踪器,Shuffle管理器等。

在正式介绍储存体系之前,需要对存储体系从整体上有个宏观的认识,浙江有利于我们理解。图1能够从整体上表示存储体系架构。

图1 储存体系架构

从图1中我们可以看到,BlockManager包含以下几项组件。

  • 1. BlockManegerMaster: 代理BlockManager与Driver上的BlockManagerMasterEndpoint通信。记号①表示Executor节点上的BlockManager通过BockManagerMaster与BlockManagerMasterEndpoint进行通信,记号②表示Driver节点上的BlockManager通过BlockManagerMaster与BlockManagerMasterEndpoint进行通信。这些通信的内容有很多,例如,注册BlockManager、更新Block信息、获取Block的位置(即Block所在的BlockManager)、删除Executor等。BlockManagerMaster之所以能够和BlockManagerMasterEndpoint通信,是因为它持有了BlockManagerMasterEndpoint的RpcEndpointRef。
  • 2. BlockManagerMasterEndpoint:由Driver上的SparkEnv负责创建和注册到Driver的RpcEnv中。BlockManagerMasterEndpoint只存在于Driver的SparkEnv中,Driver或Executor上BlockManagerMaster的driverEndpoint属性将持有BlockManagerMasterEndpoint的RpcEndpointRef。BlockManagerMasterEndpoint主要对各个节点上的BlockManager、BlockManager与Executor的映射关系及Block位置信息(即Block所在的BlockManager)等进行管理。
  • 3. BlockManagerSlaveEndpoint:每个Executor或Driver的SparkEnv中都有属于自己的BlockManagerSlaveEndpoint,分别由各自的SparkEnv负责创建和注册到各自的RpcEnv中。Driver或Executor都存在各自的BlockManagerSlaveEndpoint,并由各自BlockManager的slaveEndpoint属性持有各自BlockManagerSlaveEndpoint下发的命令。记号③表示BlockManagerMasterEndpoint向Driver节点上的BlockManagerSlaveEndpoint下发命令,记号④表示BlockManagerMasterEndpoint向Executor节点上的BlockManagerSlaveEndpoint下发命令。例如,删除Block、获取Block状态、获取匹配的BlockId等。
  • 4. SerializerManager: 序列化管理器。
  • 5. MemoryManager: 内存管理器, 负责单个结点上的储存、计算内存的分配与回收。
  • 6. MapOutputTracker: map任务输出跟踪器。
  • 7. ShuffleManeger: Shuffle管理器。
  • 8. BlockTransferServer: 块传输服务。此组件也与Shuffle相关联,用于不同阶段的任务之间的Block数据的传输与读写。例如Shuffle过程中map对应结点给Shuffle的reduce任务提供下载中间输出结果的任务。
  • 9. shuffleClinet:Shuffle的客户端。与BlockTransferService配合使用。记号⑤表示Executor上的shuffleClient通过Driver上的BlockTransferService提供的服务上传和下载Block,记号⑥表示Driver上的shuffleClient通过Executor上的BlockTransferService提供的服务上传和下载Block。此外,不同Executor节点上的BlockTransferService和shuffleClient之间也可以互相上传、下载Block。
  • 10. SecurityManager:安全管理器
  • 11. DiskBlockManager:磁盘块管理器。对磁盘上的文件及目录的读写操作进行管理
  • 12. BlockInfoManager:块信息管理器。负责对Block的元数据及锁资源进行
  • 13. MemoryStore:内存存储。依赖于MemoryManager,负责对Block的内存存
  • 14. DiskStore:磁盘存储。依赖于DiskBlockManager,负责对Block的磁盘存储 

2. Block的储存级别: StorageLevel

spark的储存体系包括磁盘存储与内存存储。Spark又将内存分为堆外内存和堆内存,有些支持序列化/反序列化,有的数据块还支持备份与复制。根据以上4点,spark将这些特性抽象为以下的几个存储级别:

object StorageLevel {
  val NONE = new StorageLevel(false, false, false, false)
  val DISK_ONLY = new StorageLevel(true, false, false, false)  
  val DISK_ONLY_2 = new StorageLevel(true, false, false, false, 2)
  val MEMORY_ONLY = new StorageLevel(false, true, false, true)
  val MEMORY_ONLY_2 = new StorageLevel(false, true, false, true, 2)
  val MEMORY_ONLY_SER = new StorageLevel(false, true, false, false)
  val MEMORY_ONLY_SER_2 = new StorageLevel(false, true, false, false, 2)
  val MEMORY_AND_DISK = new StorageLevel(true, true, false, true)
  val MEMORY_AND_DISK_2 = new StorageLevel(true, true, false, true, 2)
  val MEMORY_AND_DISK_SER = new StorageLevel(true, true, false, false)
  val MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2)
  val OFF_HEAP = new StorageLevel(true, true, true, false, 1)
}

3. 块信息

BlockInfo用于描述块的元数据信息,包括存储级别、Block类型、大小、锁信息等。

4. BlockResult

5. BlockStatus

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东阳z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值