《循序渐进学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完成。这个部分相关的源码篇幅较多,此处省略,感兴趣的读者请自行研究。

相关文章
|
存储 缓存 分布式计算
|
存储 SQL 分布式计算
性能优化:Spark SQL中的谓词下推和列式存储
性能优化:Spark SQL中的谓词下推和列式存储
|
存储 分布式计算 大数据
# Apache Spark系列技术直播# 第七讲 【 大数据列式存储之 Parquet/ORC 】
主讲人:诚历(孙大鹏)阿里巴巴计算平台事业部EMR技术专家 简介:Parquet 和 ORC 是大数据生态里最常用到的两个列式存储引擎,这两者在实现上有什异同,哪个效率更好,哪个性能更优,本次分享将和您一起探索两大列式存储。
1774 0
|
存储 分布式计算 NoSQL
基于Tablestore的一站式物联网存储解决方案-Spark 分析
## 前言 上一章节[《基于Tablestore的一站式物联网存储解决方案-数据操作篇》](https://ata.alibaba-inc.com/articles/213053) 为大家介绍了如何读写表格存储Tablestore中的数据。可以看到,无论是主键读写还是索引查询,都属于在线实时查询的场景。这些场景都要求某个查询或某个任务的服务响应时间极低(秒级别甚至毫秒级别)。然而,在共享充电宝场景
521 0
7月31日Spark钉钉群直播【Apache Spark 在存储计算分离趋势下的数据缓存】
在数据上云的大背景下,存储计算分离逐渐成为了大数据处理的一大趋势,计算引擎需要通过网络读写远端的数据,很多情况下 IO 成为了整个计算任务的瓶颈,因而数据缓存成为此类场景下的一个重要的优化手段。本次分享将介绍 Spark 在数据缓存上的一些做法,并将介绍 EMR 自研的 Jindo 存储系统在数据缓存上的应用。
|
存储 分布式计算 Apache
7月24日晚Spark社区直播:【Apache Spark 基于 Apache Arrow 的列式存储优化】
Apache Arrow 是一个基于内存的列式存储标准,旨在解决数据交换和传输过程中,序列化和反序列化带来的开销。目前,Apache Spark 社区的一些重要优化都在围绕 Apache Arrow 展开,本次分享会介绍 Apache Arrow 并分析通过 Arrow 将给 Spark 带来哪些特性。
|
存储 分布式计算 大数据
Spark in action on Kubernetes - 存储篇(一)
在上篇文章中,我们分析了Spark Operator内部的机制,今天我们会讨论一个在大数据领域中最重要的话题 - 存储。大数据已经无声无息的融入了每个人的生活中。大到旅游买房,小到外卖打车,都可以看到通过大数据提供数据分析、数据推荐、数据决策的使用场景。
3854 0
|
存储 缓存 分布式计算
基于Alluxio系统的Spark DataFrame高效存储管理技术
介绍越来越多的公司和组织开始将Alluxio和Spark一起部署从而简化数据管理,提升数据访问性能。Qunar最近将Alluxio部署在他们的生产环境中,从而将Spark streaming作业的平均性能提升了15倍,峰值甚至达到300倍左右。
12470 0