文章目录
- 核心组件
- 核心概念
- 提交流程
核心组件
Spark框架可以大致分三个部分:
第一部分: Driver + Executor ,任务执行和调度
第二部分: Master + Worker ,Saprk自身的资源调度框架,只有Standalone模式下才有Master和Worker.
第三部分: Cluster Manager ,集群管理中间件,协调任务的调度
- Application:Spark应用程序:Spark Application的概念 和 Hadoop MapReduce中的类似,指的是用户编写的Spark应用程序,包含了 一个Driver功能代码 和 分布在集群中多个节点上运行的Executor代码;
Spark应用程序,可以调用多次行动算子,每调用一次行动算子,都会提交一个Job。 - Driver:驱动程序:即运行上述Application的main()函数并且创建SparkContext,即创建SparkContext的程序。
在Spark中由 SparkContext负责 和 ClusterManager通信,进行资源的申请、任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭。
- 用于执行Spark任务中的main()方法,负责实际代码的执行
- 将用户程序转化为job;
- 调度Executor之间的任务(task);
- 跟踪Executor的执行情况;
- 通过UI展示查询运行的结果。
- Executor:资源管理器:Application运行在 Worker 节点上的一个JVM进程,负责在 Spark 作业中运行具体任务(Task),并且负责将数据存在内存或者磁盘上,任务彼此之间相互独立。
在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutorBackend,类似于Hadoop MapReduce中的YarnChild。一个CoarseGrainedExecutorBackend进程有且仅有一个executor对象,它负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task。每个CoarseGrainedExecutorBackend能并行运行Task的数量就取决于分配给它的CPU的个数了;
- Worker节点上的一个JVM进程,负责Spark作业中,执行具体的任务(task);
- 负责运行组成Spark应用的任务,并将结果返回给驱动器进程;
- 在执行器内有块管理器,为用户程序中要求缓存的RDD提供内存的缓存。
- Master:资源管理器:负责资源的调度和分配,并进行集群的监控,类似于YARN中的ResourceManager节点。
- Standalone:Spark原生的资源管理,由Master负责资源的分配
- Hadoop Yarn:由YARN中的ResourceManager负责资源的分配;
- Worker:计算节点:运行在集群的一个节点,由Master分配资源对数据进行并行的处理和计算,类似于YARN中的NodeManager节点。
- Standalone模式:指的就是通过Slave文件配置的Worker节点,
- Spark on Yarn模式:指的就是NodeManager节点;
核心概念
- Task:任务:被送到某个Executor上的工作任务;单个分区数据集上的最小处理流程单元,同一个Stage的每个分区的数据,可以交给一个Task进行处理;
- Job:作业:由一个或多个Stage所组成的一次计算作业;
包含多个Task组成的并行计算,往往由行动算子提交,一个job包含多个RDD,及作用于相应RDD上的各种Operation,一个DAG其实就是一个Job - Stage:阶段:每个Job会被拆分很多组Task,每组任务被称为Stage,也可称TaskSet;
一个Stage对应一个TaskSet;
DAG会根据 shuffle/宽依赖 划分Stage(也就是TaskSet),每产生一次shuffle,就会生成一个新阶段,一个Job的stage的数量 = shuffle算子的个数 + 1
;
Stage分成两种类型ShuffleMapStage、ResultStage。 - DAG:有向无环图(Directed Acyclic Graph):有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环;
就是映射RDD之间的依赖关系,会根据依赖关系被划分成多个Stag
- 支持 DAG 的框架被划分为第二代计算引擎,如Tez、Oozie :作业和作业之间的有向无环图
- 第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越 Job),如Spark:作业内部的有向无环图
- Parallelism:并行度:整个集群并行执行任务的数量,称为并行度。
提交流程
Spark应用程序主要有两种部署执行的方式:Client 和 Cluster。两种模式:
主要区别在于:Driver程序的运行节点位置;
- Client(默认): 会在Client本地启动Driver程序,jar包只需要在Client端有即可。
- Cluster: 会在集群中选择其中一台机器启动Driver程序,确保jar包可以在集群的任意台Worker都可以读到。
Standalone运行模式
Yarn运行模式
Yarn Cluster模式
Cluster模式 将用于监控和调度的Driver模块启动在Yarn集群资源中执行。一般应用于生产环境。
- 在 YARN Cluster 模式下,任务提交后会和 ResourceManager 通讯申请启动 ApplicationMaster,
- 随后 ResourceManager 分配 container,在合适的 NodeManager 上启动 ApplicationMaster,此时的 ApplicationMaster 就是Driver。
- Driver启动后向 ResourceManager 申请 Executor 内存,ResourceManager 接到ApplicationMaster的资源申请后会分配container,然后在合适的NodeManager上启动Executor进程
- Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数,
- 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上执行。