天天看点

Spark学习之路——2.核心组件、概念第二节、Spark核心核心组件、概念

第二节、Spark核心核心组件、概念

一、RDD

1.RDD(Resilient Distributed Datesets)弹性分布式数据集

①RDD是Spark中计算和数据的抽象,它标识已经分片(partition),不可变的并能够被并行计算的数据集合。

②RDD可以被存储在内存中也可以存储在磁盘里

③RDD提供了两种类型的变化操作:Transformation和Action

④RDD的生成方式有两种:从数据源读入,由其他RDD经过Transformation操作转化为RDD

⑤RDD在失败后自动重构

2.RDD与数据、任务之间的关系

一个RDD由多个Partition构成(在计算过程中一个partition对应一个task)

每个partition数据即可以存储在内存里,也可以存储在磁盘里

Spark学习之路——2.核心组件、概念第二节、Spark核心核心组件、概念

3.RDD的基本操作

(1)Transformation

将一个RDD转化为另一个RDD(例如通过一定的处理转化为另一个RDD,作为中间过程)

(2)Action

通过RDD计算得到一个或一组值(结果)

4.RDD的缓存位置

上面讲过:有两种存储方式,磁盘和内存

因此存储方案有多种(不止下面三种)

(1)MEMORY_ONLY

将RDD 作为反序列化的的对象存储JVM 中。如果RDD不能被内存装下,一些分 区将不会被缓存,并且在需要的时候被重新计算。 这是是默认的级别

(2)MEMORY_AND_DISK

将RDD 作为反序列化的的对象存储在JVM 中。如果RDD不能被与内存装下,超出的分区将被保存在硬盘上,并且在需要时被读取。

(3)MEMORY_ONLY_SER

将RDD 作为序列化的的对象进行存储(每一分区占用一个字节数组)。 通常来说,这比将对象反序列化的空间利用率更高,尤其当使用fast serializer, 但在读取时会比较占用CPU

二、DAG

1.什么是DAG

在Spark里每一个操作生成一个RDD,RDD之间连一条边,最后这些RDD和他们之间的边组成一个有向无环图,这个就是DAG。

2.DAG的作用

简单来说,就是我们在编写程序的过程中,对RDD的操作会产生新的RDD,此时就需要DAG将这些RDD连接起来,根据DAG将计算划分为任务集(Stage),等到执行Action操作时,集群就可以根据这个图依次执行RDD(可能会是并行),最终完成计算任务。

详细可以看下面的博客,讲的很透彻:

https://www.jianshu.com/p/84cdab3030cb

三、Spark组件

1.Spark应用执行涉及的组件

(1).master:控制、管理、监督整个Spark集群。

(2).client:客户端,提交应用程序。

(3).Driver Program:运行应用的main函数和创建SparkContext的处理程序,是每个应用的主要管理者。

(4).Spark Context:spark应用程序的入口,负责调度各个运算资源,协调各个work node上的Executor;主要是一些记录信息,记录谁运行的,运行的情况如何等。

(5)Cluster Manager:集群上用于资源分配的服务,例如Yarn,Memos。

(6)Worker Node:运行Spark程序的节点(相当于一台机器)。

(7)Executor(相当于进程):每个应用程序都有自己的Executor,每个Executor包含多个Task。

2.应用程序执行中一些概念组件

(转自: https://www.cnblogs.com/wangleBlogs/p/9929570.html)

(1).Task(任务):RDD中的一个分区对应一个task,task是单个分区上最小的处理流程单元。

(2).TaskSet(任务集):一组关联的,但相互之间没有Shuffle依赖关系的Task集合。

(3).Stage(调度阶段):一个taskSet对应的调度阶段,每个job会根据RDD的宽依赖关系被切分很多Stage,每个stage都包含 一个TaskSet。

(4).job(作业):由Action算子触发生成的由一个或者多个stage组成的计算作业。

(5).application:用户编写的spark应用程序,由一个或者多个job组成,提交到spark之后,spark为application分派资源,将程序转换并执行。

(6).DAGScheduler:根据job构建基于stage的DAG,并提交stage给TaskScheduler。

(7).TaskScheduler:将Taskset提交给Worker Node集群运行并返回结果。

3.Spark中一个应用程序的组成

Spark学习之路——2.核心组件、概念第二节、Spark核心核心组件、概念

一个应用由一个Driver和一个或多个作业(job)构成,每个作业(job)由多个阶段(Stage)构成,一个阶段(Stage)由是由多个没有Shuffle关系的任务(Task)组成。

部分内容参考:

博客:https://www.cnblogs.com/qingyunzong/p/8945933.html

下一章、将介绍Spark程序提交后的详细运行流程和Spark的运行模式

继续阅读