《循序渐进学Spark》一 3.3 Spark存储与I/O-阿里云开发者社区

开发者社区> 华章出版社> 正文

《循序渐进学Spark》一 3.3 Spark存储与I/O

简介:

本节书摘来自华章出版社《循序渐进学Spark》一书中的第3章,第3.3节,作者 小象学院 杨 磊,更多章节内容可以访问云栖社区“华章计算机”公众号查看。



3.3 Spark存储与I/O

前面已经讲过,RDD是按照partition分区划分的,所以RDD可以看作由一些分布在不同节点上的分区组成。由于partition分区与数据块是一一对应的,所以RDD中保存了partitionID与物理数据块之间的映射。物理数据块并非都保存在磁盘上,也有可能保存在内存中。

3.3.1 Spark存储系统概览

Spark I/O机制可以分为两个层次:

1)通信层:用于Master与Slave之间传递控制指令、状态等信息,通信层在架构上也采用Master-Slave结构。

2)存储层:同于保存数据块到内存、磁盘,或远端复制数据块。

下面介绍几个Spark存储方面的功能模块。

1)BlockManager:Spark提供操作Storage的统一接口类。

2)BlockManagerMasterActor:Master创建,Slave利用该模块向Master传递信息。

3)BlockManagerSlaveActor:Slave创建,Master利用该模块向Slave节点传递控制命令,控制Slave节点对block的读写。

4)BlockManagerMaster: 管理Actor通信。

5)DiskStore:支持以文件方式读写的方式操作block。

6)MemoryStore: 支持内存中的block读写。

7)BlockManagerWorker: 对远端异步传输进行管理。

8)ConnectionManager:支持本地节点与远端节点数据block的传输。

图3-8概要性地揭示了Spark存储系统各个主要模块之间的通信。

b0ebbe0a62905ac846c57d6f9bbb281bfc0c7f85

图3-8 Spark存储系统概览

3.3.2 BlockManager中的通信

存储系统的通信仍然类似Master-Slave架构,节点之间传递命令与状态。总体而言,Master向Slave传递命令,Slave向Master传递信息和状态。这些Master与Slave节点之间的信息传递通过Actor对象实现(关于Actor的详细功能会在下一节Spark通信机制中讲述)。但在BlockManager中略有不同,下面分别讲述。

1)Master节点上的BlockManagerMaster包含内容如下:

①BlockManagerMasterActor的Actor引用。

②BlockManagerSlaveActor的Ref引用。

2)Slave节点上的BlockManagerMaster包含内容如下:

①BlockManagerMasterActor的Ref引用。

②BlockManagerSlaveActor的Actor引用。

其中,在Ref与Actor之间的通信由BlockManagerMasterActor和BlockManagerSlave-Actor完成。这个部分相关的源码篇幅较多,此处省略,感兴趣的读者请自行研究。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接