开发者社区> anzhsoft> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Spark技术内幕:Storage 模块整体架构

简介:
+关注继续查看

Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的。用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.RDD#cache将数据持久化;持久化的动作都是由Storage模块完成的。包括Shuffle过程中的数据,也都是由Storage模块管理的。可以说,RDD实现了用户的逻辑,而Storage则管理了用户的数据。本章将讲解Storage模块的实现。

1.1     模块整体架构

org.apache.spark.storage.BlockManager是Storage模块与其他模块交互最主要的类,它提供了读和写Block的接口。 这里的Block,实际上就对应了RDD中提到的partition,每一个partition都会对应一个Block。每个Block由唯一的Block ID(org.apache.spark.storage.RDDBlockId) 标识,格式是"rdd_" + rddId + "_" + partitionId。

BlockManager会运行在Driver和每个Executor上。而运行在Driver上的BlockManger负责整个Job的Block的管理工作;运行在Executor上的BlockManger负责管理该Executor上的Block,并且向Driver的BlockManager汇报Block的信息和接收来自它的命令。


各个主要类的功能说明:

1)       org.apache.spark.storage.BlockManager: 提供了Storage模块与其他模块的交互接口,管理Storage模块。

2)       org.apache.spark.storage.BlockManagerMaster: Block管理的接口类,主要通过调用org.apache.spark.storage.BlockManagerMasterActor来完成。

3)       org.apache.spark.storage.BlockManagerMasterActor: 在Driver节点上的Actor,负责track所有Slave节点的Block的信息

4)       org.apache.spark.storage.BlockManagerSlaveActor:运行在所有的节点上,接收来自org.apache.spark.storage.BlockManagerMasterActor的命令,比如删除某个RDD的数据,删除某个Block,删除某个Shuffle数据,返回某些Block的状态等。

5)       org.apache.spark.storage.BlockManagerSource:负责搜集Storage模块的Metric信息,包括最大的内存数,剩余的内存数,使用的内存数和使用的Disk大小。这些是通过调用org.apache.spark.storage.BlockManagerMaster的getStorageStatus接口实现的。

6)       org.apache.spark.storage.BlockObjectWriter:一个抽象类,可以将任何的JVM object写入外部存储系统。注意,它不支持并发的写操作。

7)       org.apache.spark.storage.DiskBlockObjectWriter:支持直接写入一个文件到Disk,并且还支持文件的append。实际上它是org.apache.spark.storage.BlockObjectWriter的一个实现。现在下面的类在需要Spill数据到Disk时,就是通过它来完成的:

a)        org.apache.spark.util.collection.ExternalSorter

b)       org.apache.spark.shuffle.FileShuffleBlockManager

8)       org.apache.spark.storage.DiskBlockManager:管理和维护了逻辑上的Block和存储在Disk上的物理的Block的映射。一般来说,一个逻辑的Block会根据它的BlockId生成的名字映射到一个物理上的文件。这些物理文件会被hash到由spark.local.dir(或者通过SPARK_LOCAL_DIRS来设置)上的不同目录中。

9)       org.apache.spark.storage.BlockStore:存储Block的抽象类。现在它的实现有:

a)        org.apache.spark.storage.DiskStore

b)       org.apache.spark.storage.MemoryStore

c)        org.apache.spark.storage.TachyonStore

10)     org.apache.spark.storage.DiskStore:实现了存储Block到Disk上。其中写Disk是通过org.apache.spark.storage.DiskBlockObjectWriter实现的。

11)     org.apache.spark.storage.MemoryStore:实现了存储Block到内存中。

12)     org.apache.spark.storage.TachyonStore:实现了存储Block到Tachyon上。

13)     org.apache.spark.storage.TachyonBlockManager:管理和维护逻辑上的Block和Tachyon文件系统上的文件之间的映射。这点和org.apache.spark.storage.DiskBlockManager功能类似。

14)     org.apache.spark.storage.ShuffleBlockFetcherIterator:实现了取Shuffle的Blocks的逻辑,包括读取本地的和发起网络请求读取其他节点上的。具体实现可以参照《Shuffle模块详解》。


如果您喜欢 本文,那么请动一下手指支持以下博客之星的评比吧。非常感谢您的投票。每天可以一票哦。


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

相关文章
【Spark Summit East 2017】从容器化Spark负载中获取的经验
本讲义出自Tom Phelan在Spark Summit East 2017上的演讲,Tom Phelan探讨了如何实现高可用性的分布式大数据应用和数据中心主机,并分享了学到的经验教训,并对于如何在一个可靠的、可伸缩的、高性能的环境将大数据应用程序容器化给出了一些提示。
1587 0
【Spark Summit East 2017】迈向实时:为个性化创建不断更新频率的数据集
本讲义出自Shriya Arora在Spark Summit East 2017上的演讲,主要介绍了NETFLIX使用Spark处理个性化数据集空间的经验,并分享了使用流处理大规模的个性化数据集的案例,对于从批处理到流计算的转型意识以及这一过程中必须要面对的技术挑战。
1525 0
【Spark Summit East 2017】使用Spark对仙女星系数据进行分析
本讲义出自Jose Nandez在Spark Summit East 2017上的演讲,主要介绍了使用Spark与Python API对于仙女星系的数据进行交互式数据分析,Spark-Python代码充分利用了Spark RDDs进行查询来帮助预测某一对像是否属于仙女星系。
1702 0
【Spark Summit East 2017】ModelDB:用于管理机器学习模型的系统
本讲义出自Manasi Vartak在Spark Summit East 2017上的演讲,主要介绍了一个新颖的用于管理机器学习模型的端到端系统。通过使用客户端库,ModelDB可以在原生环境中自动跟踪和ML版本模型,ModelDB可以捕获构建在不同语言环境中的模型和数据管道,结构化的元数据和模型的表示方法提供了进行复杂查询的工具。
2175 0
【Spark Summit East 2017】Opaque:强安全性的数据分析平台
本讲义出自Marius van Niekerk在Spark Summit East 2017上的演讲,随着企业转向以云计算为基础进行数据分析,云安全漏洞的风险构成了严重的威胁。对数据进行加密是数据传输中的第一步,然而却必须在内存中进行解密,这就有可能暴露在被黑客攻击过的操作系统或者虚拟机中。
1454 0
【Spark Summit East 2017】将HPC算法引入大数据平台
本讲义出自Nikolay Malitsky在Spark Summit East 2017上的演讲,主要介绍了使用轻量级源工具集开发的,基于MPI的Spark平台的扩展,扩展的背景和原理正如题目所示:将HPC算法引入大数据平台。
1776 0
【Spark Summit East 2017】Ernest:基于Spark的性能预测大规模分析框架
本讲义出自Shivaram Venkataraman在Spark Summit East 2017上的演讲,近期使用Spark进行机器学习,基因组学和科学分析呈现增长的趋势,然而将这些应用部署在云计算平台上是有一定挑战性的,而应对上述挑战的关键在于有能力预测的应用程序在保持高性能的状态下所需要的资源配置,这样就可以自动选择最优配置。
1764 0
【Spark Summit East 2017】Spark中的容错:从生产实践中获取的经验
本讲义出自Jose Soltren在Spark Summit East 2017上的演讲,主要介绍了Spark容错中的螺母和螺栓,他首先简述了Spark中的各种容错机制,然后讨论了YARN上的Spark、调度与资源分配,在演讲中还对于一些用户案例进行了探讨研究并给出了一些需要的工具,最后分享了未来Spark中容错未来的发展方向比如调度器和检查点的变化。
1810 0
【Hadoop Summit Tokyo 2016】基于Apache Spark的数据科学
本讲义出自Robert Hryniewicz在Hadoop Summit Tokyo 2016上的演讲,主要介绍了数据科学以及机器学习的相关基本概念以及机器学习的例子,并分享了机器学习的方法,还分享了K-means的聚类方法、决策树以及随机森林等相关知识。
1703 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
PostgresChina2018_桑栎_PipelineDB体系结构和使用场景(1)
立即下载
基于SparkSQL的海量数据仓库设计与实践
立即下载
基于HBase和Spark构建企业级数据处理平台
立即下载