spark BlockManager

BlockManager是一个嵌入在 Spark 中的 key-value型分布式存储系统,也是Master-Slave 结构的,RDD-cache shuffle-outputbroadcast 等的实现都是基于BlockManager来实现的:

  • shuffle 的过程中使用 BlockManager 作为数据的中转站
  • 将广播变量发送到 Executor 时, broadcast 底层使用的数据存储层
  • 如果对一个 RDD 进行了cacheCacheManager也是把数据放在了BlockManager 中, 后续 Task 运行的时候可以直接从 CacheManager 中获取到缓存的数据 ,不用再从头计算
BlockManager 也是分布式结构,在 Driver 和所有 Executor 上都会有BlockManager。每个节点上存储的 block 信息都会汇报给 Driver 端的 BlockManager Master作统一管理, BlockManager 对外提供 get set 数据接口,可将数据存储在Memory、 Disk Off-heap
 
Driver 上有 BlockManager Master ,负责对各个节点上的 BlockManager 内部管理的数据的元数据进行维护,比如 block 的增删改等操作,都在这里维护好元数据的变更。
Driver的组件为BlockManager Master ,负责:
  • 各节点上BlockManager内部管理数据的元数据进行维护,如 block 的增、删、改、查等操作。
  • 只要 BlockManager 执行了数据增、删、改操作,那么必须将 Block 的BlockStatus 上报到BlockManager MasterBlockManager Master会对元数据进行维护。
BlockManager 运行在所有的节点上,包括所有 Driver Executor 上:
  • BlockManager对本地和远程提供一致的 get set 数据块接口, BlockManager本身使用不同的存储方式来存储这些数据,包括memory、disk、off-heap
  • BlockManager负责Spark底层数据存储与管理,DriverExecutor的所有数据都由对应的BlockManager进行管理
  • BlockManager创建后,立即向 BlockManager Master进行注册,此时BlockManager Master会为其创建对应的BlockManagerInfo
  • BlockManager中有3个非常重要的组件:

    DiskStore:负责对磁盘数据进行读写
    MemoryStore:负责对内存数据进行读写

    BlockTransferService:负责建立到远程其他节点BlockManager的连接,负责对远程其他节点的BlockManager的数据进行读写

  • 使用BlockManager进行写操作时,如RDD运行过程中的中间数据,或者执行persist操作,会优先将数据写入内存中。如果内存大小不够,将内存中的部分数据写入磁盘;如果persist指定了要replica,会使用BlockTransferService将数据复制一份到其他节点的BlockManager上去

  •  

    使用 BlockManager 进行读操作时,如 Shuffle Read 操作,如果能从本地读取,就利用 DiskStore MemoryStore 从本地读取数据;如果本地没有数据,就利用 BlockTransferService 从远程 BlockManager 读取数据

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值