zoukankan      html  css  js  c++  java
  • Spark的分布式存储系统BlockManager全解析

    摘要:BlockManager 是 spark 中至关重要的一个组件,在spark的运行过程中到处都有 BlockManager 的身影,只有搞清楚 BlockManager 的原理和机制,你才能更加深入的理解 spark。

    § BlockManager是什么?

    • BlockManager的作用?我理解是负责做RDD的存储,如何存下来给后续任务去使用。
      其内部模块图如下:

    • 图中看到有个memoryStore和DiskStore,说明把block做存储时,有内存和磁盘2种方式,存储后就都i通过这个Store去管理。
    • 存储时以Block为单位,所以会有个映射用的数组
    • 有一个负责和Driver的BlockManagerMaster通信的引用接口
    • 还有个shuffClient,负责做 备份 和 下载, 即各executor之间会通过shuffClient来做block的传输。

    § BlockManager和Driver、executor的关系

    其关系如图:

    从中可以看到

    1. blockManagerMaster在driver端生成
    2. executor中生成blockManager,并负责向BMM注册。
    3. spark中注册消息通过ActorSystem进行发送

    § 把块block 存入blockManager的流程

    比如特殊的2个地方:

    1. 试图put时,会先看下该blockId是否有缓存,有的话直接取过来,否则就重新创建blockInfo
    2. 存储时会先判断内存是否充足,充足就写入memoryStore,如果不够会先释放再尝试放入。

    § 从blockManager中删除块

    删除的操作没什么特别的,主要是会判断一下块的存储级别,选择从不同的store中取块。

    § shuffClient 下载block操作

    BMMAC就是BlockManagerMasterActor,我当初瞎写的简称

    • 注意点:当要取的块来自好几个BlockManager时, 把它打乱顺序,避免好几个BM同时从某一个BM上下载数据!

    § shuffeClinet的备份操作

    • BM为什么要备份他的block?书里作者没解释,我的理解是为了防止节点崩溃或者丢失,导致中间任务无法继续执行?
    • 因为其他的BlockManager能接收的block可能有限,所以备份时可能会涉及多个block, 每次我们一样,从BMmaster那里拿一个 ***随机***的blockManager做备份,避免都往同一个上备份。

    § BlockManager和Executor、driver的关系:

    从中可以看到

    1. blockManagerMaster在driver端生成
    2. executor中生成blockManager,并负责向BMM注册。
    3. spark中注册消息通过ActorSystem进行发送

     

    点击关注,第一时间了解华为云新鲜技术~

  • 相关阅读:
    EasyUI限制时间选择(开始时间小于结束时间)
    C# readonly与const的区别
    C# Lambda 表达式
    C# 扩展方法
    C# 枚举enum
    Visual Studio中的“build”、“rebuild”、“clean”的区别
    无root开热点教程
    数据库锁
    安卓:标题栏右上角添加按钮
    安卓:从assets目录下复制文件到指定目录
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/14167623.html
Copyright © 2011-2022 走看看