Spark系列文章:
大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客
大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客
大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客
大数据 - Spark系列《四》- Spark分布式运行原理-CSDN博客
大数据 - Spark系列《五》- Spark常用算子-CSDN博客
大数据 - Spark系列《六》- RDD详解-CSDN博客
大数据 - Spark系列《七》- 分区器详解-CSDN博客
大数据 - Spark系列《八》- 闭包引用-CSDN博客
大数据 - Spark系列《九》- 广播变量-CSDN博客
大数据 - Spark系列《十》- rdd缓存详解-CSDN博客
大数据 - Spark系列《十一》- Spark累加器详解-CSDN博客
大数据 - Spark系列《十二》- 名词术语理解-CSDN博客
大数据 - Spark系列《十三》- spark调度流程(运行过程)-CSDN博客
大数据 - Spark系列《十四》- spark集群部署模式-CSDN博客
目录
15.1 Yarn角色回顾
15.2 Spark运行角色
15.3 Spark的Job任务调度全流程
15.4 Spark的任务提交全流程
15.5 Spark应用程序
15.1 Yarn角色回顾
Yarn主要有四类角色,从2个层面去看:
资源管理层面:
-
集群资源管理者(Master):ResourceManager
-
单机资源管理者(Worker):NodeManager
任务计算层面:
-
单任务管理者(Master):ApplicationMaster
-
单任务执行者(Worker):Task(容器内计算框架的工作角色)
15.2 Spark运行角色
Spark中由4类角色组成了整个spark的运行时环境
资源管理层面:
-
Master:管理整个集群的资源
-
Worker的:管理单个服务器的资源
任务计算层面:
-
Driver:管理单个spark任务在运行的时候的工作
-
Executor(Worker):单个任务运行的时候的一堆工作者,干活的。
15.3 Spark的Job任务调度全流程
任务调度流程是指Spark集群中的资源管理器(如YARN或Mesos)将任务分配给可用的执行器(如Spark Worker)的过程。它包括以下步骤:
任务调度流程是任务提交全流程的一个组成部分,任务提交全流程包含了更多的步骤和细节。
Spark的任务,由Driver进行调度,这个工作包含:
-
逻辑DAG产生
-
分区DAG产生
-
Task划分
-
将Task分配成Executor并监控其工作
如图,Spark程序的调度流程如图:
-
当使用命令行提交Spark任务代码时,首先会运行MAIN函数,创建SparkContext对象(构建DAGScheduler和TaskScheduler)。
-
因为Spark中的计算操作是基于RDD算子链进行的,对于转换算子,它只会形成了RDD之间的依赖关系,构建DAG有向无环图,只有在最后调用行动(action)算子时,才会触发job并调度执行。
-
执行时,Driver端会将有向无环图提交给DAGScheduler
-
DAG Scheduler(DAG调度器)会基于DAG图,按照宽窄依赖划分一个个stage.
-
stage被创建完之后,以stage为单位,将task封装到TaskSet里面。再把TaskSet提交给TaskScheduler
-
TaskScheduler(Task调度器)将逻辑Task分配到各个Executor上干活,并监控它们。
-
Worker(Executor),主要就是听从它们的指令干活,并定期被向TaskScheduler汇报它的进度。
15.4 Spark的任务提交全流程
任务提交全流程是指将Spark应用程序提交到集群并执行的整个过程,包括任务调度流程以及其他相关步骤:
当我们用命令行提交任务代码后,会执行以下操作
-
客户端向资源管理器master发送注册和申请资源的请求,master负责任务资源的分配
-
Master收到申请资源的请求后,向指定的worker节点发送请求,然后worker节点会开启对应的executor的进程
-
Executor进程会向driver发送注册请求,然后申请要计算的task
-
在driver的内部会执行一些操作,最终都会通过task scheduler提交task到executor进程里去运行
-
当所有的task任务在executor进程里面依次运行完成后,drver端会向master发送一个注销请求,
-
Master收到这个请求后,然后通过对应的worker节点关闭executor进程,最后worker节点上的计算资源就会得到释放
15.5 Spark应用程序
一个Spark应用程序包括Job、Stage及Task:
-
第一:Job是以Action方法为界,遇到一个Action方法则触发一个Job
-
第二:Stage是Job的自己,以RDD宽依赖(即Shuffle)为界,遇到Shuffle做一次划分
-
第三:Task是Stage的自己,以并行度(分区数)来衡量,分区数是多少,则有多少个task