我是靠谱客的博主 平常煎饼,最近开发中收集的这篇文章主要介绍初始spark(四)之spark存储管理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们在使用spark进行数据相关的操作的时候,经常会用到的是RDD,但是我们也都知道RDD是一个抽象的数据集,并不是真正的数据存储的地方,RDD使我们对数据的操作更方便,其实RDD的出现避免了我们对数据存储底部的接触,可以更方便的编写我们的应用。其实数据的存储都是由spark的存储管理模块实现和管理的。

spark存储管理模块的整体架构:从架构上可以将存储架构管理模块分为通信层和存储层两个部分。

通信层:存储管理模块采用的是主从架构来实现通信层,主节点和从节点之间传输控制信息、状态信息。

存储层:存储管理模块将数据存储到硬盘或者内存中,必要时还需要将数据复制到远端,这些操作都是由存储层来实现和提供相应的接口的。

从功能上看存储管理模块又可以分为RDD缓存和shuffle数据的持久化。

RDD缓存:整个存储管理模块主要的工作是作为RDD的缓存,包括基于内存和磁盘的缓存

shuffle数据的持久化:shuffle之后的结果也是交给存储管理模块进行相应的整理的。shuffle性能的好坏直接会影响整个spark应用的性能,因此存储管理模块中对于shuffle数据的处理有别于传统的RDD缓存。

从通信的层面来看:我们知道对于spark的存储结构是主从结构,包括还有驱动器和执行器的结构,通信包括主从之间的通信,以及驱动器与执行器间的通信,在进行通信的时候首先每个节点都需要注册存储管理模块,即从结构节点将自己的存储信息告知主节点,执行器也会将自己的信息告知驱动器。

从存储的层面来看:我们也都知道RDD是由不同的分区组成的,我们对RDD进行的一系列的转换和执行操作也都是作用在RDD的每个分区上的,但是RDD知识抽象层面上的存储,具体的实现,即实际的存储为数据块。其实分区和数据块是一一对应的,数据块是存储管理模块中的最小的存储单元,我们在操作数据的时候实际就是针对数据块上的数据进行相关的计算的。

在存储管理模块中的数据块大致的可以分为一下几类:

RDD数据块:用来标识所缓存的RDD数据

shuffle数据块:用来标识持久化的shuffle数据

广播变量数据块:主要用来标识存储的广播变量数据

任务返回结果数据块:顾名思义主要是用来标识,在执行任务的时,对任务结果的存储

流式数据块:主要是用来表示接收到的流式数据块

当然在进行操作时,数据缓存的位置也是有区别的,包括内存缓存和磁盘缓存,我们都知道,内存缓存要比磁盘的缓存性能高,但有时数据量很大的情况下,一味的将数据进行内存缓存,反而会降低整个程序的性能,原则上的缓存效果应该是,在缓存的时候要查看内存的余量,当内存不足的时候,应该将数据进行磁盘的缓存,从而保证程序的性能。在数据持久化的时候,也可以对缓存的地方做出设定,可以设置存储的位置,spark中也提供了很多关于数据缓存的方法。

最后

以上就是平常煎饼为你收集整理的初始spark(四)之spark存储管理的全部内容,希望文章能够帮你解决初始spark(四)之spark存储管理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部