第二节、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数据即可以存储在内存里,也可以存储在磁盘里
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中一个应用程序的组成
一个应用由一个Driver和一个或多个作业(job)构成,每个作业(job)由多个阶段(Stage)构成,一个阶段(Stage)由是由多个没有Shuffle关系的任务(Task)组成。
部分内容参考:
博客:https://www.cnblogs.com/qingyunzong/p/8945933.html
下一章、将介绍Spark程序提交后的详细运行流程和Spark的运行模式