• Spark源码走读5——Storage


    BlockManager

    Storagef模块主要分为两层:

    1):负责向BlockManagerMaster上报blaock信息,master与slave之间的信息传递通           过m-s的模式传递

    2):数据层  负责存储和读取信息,主要在disk、memory、tachyon上

    通常RDD的数据存放在分区中,而cache的数据一般都是block中。所以BlockManager管理着所有的Block。

    BlockManeger的构造成员:


    初始化方法,有两个类容:1、注册BlockManagerMaster,2、启动BlockManagerWorker


    Register BlockManger

    注册BlockManager就是发送一个单向消息给Master Actor。而这个消息参数则是一个RegisterBlockManager对象,实例化这个对象需要设置几个属性:id, maxMemSize, slaveActor


    这里需要查看tell方法。源码如下:


    Akka是一个基于scala编写的分布式消息驱动框架。消息发送完后,BlockManagerMasterActor会接收处理消息。BlockManagerMasterActor是Master节点上的Actor来跟踪所有的Slave的Block的状态。接收注册的代码如下:


    这里主要查看register方法:


    以上代码描述了Storage在通讯层处理代码。

    Stroage

    Spark在存储上主要提供了三种方案:




    MemoryStore

    基于内存的存储有两种一种是基于反序列化java对象数组和列化的ByteBuffers。在MemoyStore中维护了一个LinkedHashMap对象,它是以blockID和MemoryEntry的K/V存储。

    private valentries = new LinkedHashMap[BlockId, MemoryEntry](32, 0.75f, true)

    存储方法主要包括两种putBytes、putArray。在具体存储的时候需要根据StorageLevel的序列化属性deserialized,对数据做不同的操作。当内存不够的时候,默认是写磁盘的。具体看下这两个方法:


    首先看下putIterator方法:


    这里不再一一介绍方法,下面看下读取主要方法:getBytes、getValues


    读取Block主要传递blockId就行了。

    DiskStore

    将block存储到磁盘上。和MemoryStroe一样写入和读取都有两种方法putBytes、putArray。源码如下:


    TachyonStroe

    Tachyon是一个基于内存的分布式存储框架。这里的存储到Tachyon和MemoryStroe一样都有两种方法。


    这里主要看putIntoTachyonStore方法


    RDD API

    在Shuffle过程中,为保持数据容错或者结构数据再次利用。RDD提供了cache、persist来存储数据,在源码中可以看出其实cache就是调用了persist。  


    StorageLevel

    StotageLevel标志着Spark Storage的存储级别。它的存储介质主要包括Disk、Memory、OffHeap。另外还有deserialized标志数据序列化操作和replication副本数。在源码中默认为1个。下面从源码中阅读StorageLevel。

    CheckPoint

    一般在程序运行比较长或者计算量大的情况下,需要进行CheckPoint。这样可以避免在运行中出现异常导致代价过大的问题。CheckPoint会把数据写在本地磁盘上。在进行checkpoint前的RDD数据需要进行cache。因为checkpoint的时候会移除它的所有父节点信息,那麽在第二次加载的时候就不需要重新从磁盘加载数据。


  • 相关阅读:
    【Nginx】--Linux服务器中配置Nginx一个域名访问多个项目
    【node】-- express 热部署,修改不重新启动
    typora快捷键
    简单工厂模式
    软件设计七大原则
    Spring:事务的传播行为
    Spring:MVC执行流程
    Spring:beanfactory中循环依赖和命名重复
    Spring:MVC启动时的WebApplicationContext的关系
    Spring:如何实现注解的组合
  • 原文地址:https://www.cnblogs.com/huwf/p/4273375.html
Copyright © 2020-2023  润新知