9-1、Spark-Storage

6Storage

Storage模块负责管理Spark计算过程中产生的数据,包括基于Disk的和基于Memory的。

用户编程时候cache将数据持久化,持久化的动作都是由Storage模块完成的,包括Shuffle过程中的数据,都是Storage模块管理的。

RDD实现的是用户逻辑,而Storage管理用户的数据。在Driver端和Executor端,都会有Storage模块。

 

6.1Storage整体架构

Storage模块采用的是Master/Slave的架构。

Master负责整个ApplicationBlock的元数据信息的管理和维护。

Slave需要将Block的更新等状态上报到Master,同时接收Master的命令,比如删除一个RDDShuffle相关的数据或者广播变量。

MasterSlave之间通过AKKA消息传递机制进行通信。

 

下图为Storage模块架构图:

 

 

SparkContext创建时,它会创建Driver端的SparkEnv,而SparkEnv会创建

BlockManagerBlockManager创建的时候会持有一个BlockManagerMasterBlockManagerMaster会把请求转发给BlockManagerMasterActor来完成元数据的管理和维护。

而在Executor端,也存在一个BlockManager,它也会持有一个BlockManagerMaster,只不过BlockManagerMaster会持有一个DriverBlockManagerMasterActorReference,因此Executor端的BlockManager就能通过这个ActorReferenceBlock的信息上报给Master

BlockManager本身还持有一个BlockManagerSlaveActor,而这个SlaveActor还会被上报到MasterMaster会持有这个Slave ActorReference,并通过这个ReferenceSlave发送一些命令,比如删除Slave上的RDDShuffle相关的数据或者是广播变量。

 

MasterSlave之间并没有专门的心跳,而是通过DriverExecutor之间的心跳来间接完成的。

Master持有整个ApplicationBlock的元数据信息,包括Block所在的位置,Block所占的存储空间大小(含3种级别:内存、DiskTackyon)。

6.2PartitionBlock

BlcokManagerStorage模块与其他模块交互的最主要的类,它提供了读和写Block的接口。

这里的Block实际上就对应了RDD中提到的Partition,每一个Partiton都会对应一个Block

每个Block由唯一的Block ID标识,格式rdd_ + rddid + partitionid

下图为:RDDpartitionblock的逻辑关系图

 

 

BlockManager会运行在Driver和每一个Executor上。

运行在Driver上的BlockManager负责整个ApplicationBlock的管理工作。

运行在Executor上的BlockManager负责管理该Executor上的Block,并且向DriverBlockManager汇报Block的信息和接收来自它的命令。

6.3、存储级别

存储级别,对用户来说是RDD相关的持久化和缓存。

在每个节点都将RDDpartition的数据保存在内存中,后续的计算将会变得非常快(通常会10倍以上)。可以说,缓存是Spark构建迭代式算法和快速交互式查询的关键。

用户可以直接调用persus()或者cache()来标记一个RDD需要持久化,cache()是使用默认存储级别的快捷方式。

只有触发了一个Action后,计算才会提交到集群开始真正的运算。因此RDD只有经过一次Action后,才能将RDD缓存到内存中以供以后的计算使用。

用户可以设置StorageLevel来设置需要的存储级别。不同的存储级别可以选择持久化数据到DiskMemoryTachyon

 

下图为Storage模块支持的存储级别:

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值