Spark综合学习笔记(二)

wuchangjian2021-11-16 15:31:13编程学习

学习致谢:

https://www.bilibili.com/video/BV1Xz4y1m7cv?p=32

Spark内核原理

一、依赖关系

在这里插入图片描述
宽依赖:有shuffle
子RDD的一个分区会依赖于父RDD的多个分区–错误
父EDD的一个分区会被子RDD的多个分区所依赖–正确
在这里插入图片描述
窄依赖:没有shuffle
子RDD的一个分区会依赖于父RDD的1个分区–错误
父EDD的一个分区会被子RDD的1个分区所依赖–正确
在这里插入图片描述
为什么要区分宽窄依赖
对窄依赖:并行化+容错
宽依赖:进行阶段划分,(shuffle后的阶段需要等待shuffle前的阶段计算完才能执行)

在这里插入图片描述

二、DAG和Stage

DAG

Spark的DAG:就是spark任务/程序执行的流程图
DAG的开始:从创建RDD开始
DAG的结束:到action结束
一个spark程序中有几个Action操作就有几个DAG

在这里插入图片描述
Stage
在这里插入图片描述

Stage:是DAG中根据shuffle划分出来的阶段!
前面的阶段执行完才能执行后面的阶段
如图例:整个图为DAG,根据shuffle划分阶段 左边Stage1中有很多Task是并行运算的,不需要等待
也就是说同一个阶段中的线程任务可以并行执行,无需等待

在这里插入图片描述

三、名词解释

在官网中
http://spark.apache.org/docs/2.4.5/cluster-overview.html

其实有解释,如图所示,Spark Application执行时涵盖的很多概念都有解释
在这里插入图片描述
此处我们进行一个简短的翻译

1.Application:应用,就是程序员编写的Spark代码,如wordcount代码
2.Driver:驱动程序,就是用来执行main方法的JVM进程,里面会执行一些Drive端的代码,如创建sparkcontext,设置应用名,设置日志级别...
3.sparkContext:Spark运行时的上下文环境,用来和c1usterManager进行通信的,并进行资源的申请、任务的分配和监控等
4.c1usterManager:集群管理器,对于standalone模式,就是Master,对于Yarn模式就是ResourceManager /ApplicationMaster ,在集群上做统一的资源管理的进程
5.worker :工作节点,是拥有CPU/内存等资源的机器,是真正干活的节点
6.Executor:运行在worker中的VM进程!
7.RDD:弹性分布式数据集
8.DAG:有向无环图,就是根据Action形成的RDD的执行流程图---静态的图
9.Job:作业,按照DAG进行执行就形成了Job---按照图动态的执行
10.stage: DAG中,根据shuffle依赖划分出来的一个个的执行阶段!
11.Task:一个分区上的一系列操作(pip1ine上的一系列流水线操作)就是一个Task,同一个Stage中的多个Task可以并行执行!(一个Task由一个线程执行),所以也可以这样说:Task(线程)是运行在Executor(进程)中的最小单位!
12.Taskset:任务集,就是同一个stage中的各个Task组成的集合!

结合官网中的图进行理解
在这里插入图片描述

四、job提交执行流程

在这里插入图片描述

五、web-UI查看

在实例中查看,如图所示,有5个job,由于job是的DAG的动态执行,所以理论上,有几个job就有几个DAG
在这里插入图片描述
点击其中一个job
在这里插入图片描述
查看DAG
在这里插入图片描述
再打开一个job对应的DAG进行对比,发现多分割出了一部分,具体的原因是对应的算子shuffle-true即有shuffle就会分割
在这里插入图片描述

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。