SparkCore-核心组件,核心概念,提交流程

核心组件

在这里插入图片描述
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关闭。

    1. 用于执行Spark任务中的main()方法,负责实际代码的执行
    2. 将用户程序转化为job;
    3. 调度Executor之间的任务(task);
    4. 跟踪Executor的执行情况;
    5. 通过UI展示查询运行的结果。
  • Executor:资源管理器:Application运行在 Worker 节点上的一个JVM进程,负责在 Spark 作业中运行具体任务(Task),并且负责将数据存在内存或者磁盘上,任务彼此之间相互独立。

    在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutorBackend,类似于Hadoop MapReduce中的YarnChild。一个CoarseGrainedExecutorBackend进程有且仅有一个executor对象,它负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task。每个CoarseGrainedExecutorBackend能并行运行Task的数量就取决于分配给它的CPU的个数了;

    1. Worker节点上的一个JVM进程,负责Spark作业中,执行具体的任务(task);
    2. 负责运行组成Spark应用的任务,并将结果返回给驱动器进程;
    3. 在执行器内有块管理器,为用户程序中要求缓存的RDD提供内存的缓存。
  • Master:资源管理器:负责资源的调度和分配,并进行集群的监控,类似于YARN中的ResourceManager节点。

    1. Standalone:Spark原生的资源管理,由Master负责资源的分配
    2. Hadoop Yarn:由YARN中的ResourceManager负责资源的分配;
  • Worker:计算节点:运行在集群的一个节点,由Master分配资源对数据进行并行的处理和计算,类似于YARN中的NodeManager节点。

    1. Standalone模式:指的就是通过Slave文件配置的Worker节点,
    2. 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在这里插入图片描述

    1. 支持 DAG 的框架被划分为第二代计算引擎,如Tez、Oozie :作业和作业之间的有向无环图
    2. 第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越 Job),如Spark:作业内部的有向无环图
  • Parallelism:并行度:整个集群并行执行任务的数量,称为并行度。

提交流程

Spark应用程序主要有两种部署执行的方式:Client 和 Cluster。两种模式:

主要区别在于:Driver程序的运行节点位置;

  1. Client(默认): 会在Client本地启动Driver程序,jar包只需要在Client端有即可。
  2. Cluster: 会在集群中选择其中一台机器启动Driver程序,确保jar包可以在集群的任意台Worker都可以读到。

Standalone运行模式
在这里插入图片描述

Yarn运行模式
在这里插入图片描述
在这里插入图片描述

Yarn Cluster模式

Cluster模式 将用于监控和调度的Driver模块启动在Yarn集群资源中执行。一般应用于生产环境。

  1. 在 YARN Cluster 模式下,任务提交后会和 ResourceManager 通讯申请启动 ApplicationMaster,
  2. 随后 ResourceManager 分配 container,在合适的 NodeManager 上启动 ApplicationMaster,此时的 ApplicationMaster 就是Driver。
  3. Driver启动后向 ResourceManager 申请 Executor 内存,ResourceManager 接到ApplicationMaster的资源申请后会分配container,然后在合适的NodeManager上启动Executor进程
  4. Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数,
  5. 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上执行。

猜你喜欢

转载自blog.csdn.net/qq_32727095/article/details/108448184