四, Spark运行架构

四, Spark 运行架构

4.1 整体架构

  • Spark框架的核心是一个计算引擎, 整体来说, 它采用了主-从master-slave的结构
  • 下图是Spark执行时的基本结构,
    • Driver表示master: 负责管理整个集群中的作业任务调度
    • Executor是slave: 负责实际执行任务

四, Spark运行架构_第1张图片


  • Spark Apllication的运行架构由两部分组成: Driver program(SparkContext)Excutor, Spark Application一般都是在集群中运行, 比如Spark Standalone, YARN, Mesos, 这个集群模式给Spark Application 提供了计算资源, 并对这些资源进行管理, 这些资源既可以给executor运行, 也可以给Driver Progam运行.
  • 根据Spark Allication的Driver program是否在资源集群中运行, Spark Application的运行方式又可以分为Cluster模式Client模式;

有必要掌握的基本术语:

四, Spark运行架构_第2张图片

术语 解释
Application 类似于MR中的概念, 指的是用户编写的Spark应用程序, 内含有一个Driver功能的代码和分布在集群中多个节点上运行的Excutor代码
Driver Program 运行Application 的main()函数并且创建SparkContext, 通常用SparkContext代表Driver Program; 其中创建SparkContext的目的是为了准备Spark应用程序的运行环境; 在Spark中由SparkContext负责和ClusterManager通信, 进行资源的申请, 任务的分配和监控; 当Excutor部分运行完毕后, Driver负责将SparkContext关闭.
Excutor 为某个Application运行在Worker节点上的一个进程, Excutor进程负责运行Task, 并且负责将数据存在内存或者磁盘上; 每个Application都有各自独立的excutors
Cluster Manager 指的是在集群上获取资源的外部服务,目前有: Ø Standalone:Spark原生的资源管理,由Master负责资源的分配;Ø Hadoop Yarn:由YARN中的ResourceManager负责资源的分配;
Worker NOde 集群中任何可运行Application代码的节点, 在Standalone模式中指的就是通过Slave文件配置的Worker节点,在Spark on Yarn模式中指的就是NodeManager节点
Job 包含多个Task组成的并行计算, 往往由Spark Action催生, 一个Job包含多个RDD及作用在相应RDD上的各种Operation;
Stage 每个Job会被拆分为很多组Task, 每一组任务叫Stage, 或者叫TaskSet
Task 被送到某个Excutor上的工作任务
RDD Spark的基本计算单元, 可以通过一系列算子进行操作(主要有Trasformation和 Action操作)
DAG Scheduler 根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler
Task Scheduler 将Taskset提交给worker(集群)运行并回报结果

4.2 核心组件

4.2.1 Driver && Excutor 计算组件

Driver: 运行Spark Application的main()函数, 并创建SparkContext

Driver 功能
1. 将用户程序(Spark Application)转化为作业(job)
2. 在 Excutor 之间调度任务(task)
3. 跟踪Excutor 的执行情况
4. 通过UI 展示查询运行情况

Excutor: Worker Node中的一个JVM进程, 用来执行分配给该节点的Task,任务彼此之间相互独立;
Spark 应用启动时,Executor节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有Executor节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。

Excutor核心功能
负责运行组成Spark应用的任务,并将结果返回给驱动器进程
通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

4.2.2 Master && Worker 资源(只存在于StandAlone中)

Spark集群的独立部署环境(StandAlone)中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master和Worker

  • 这里的Master是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于Yarn环境中的RM,
  • 而Worker呢,也是进程,一个Worker运行在集群中的一台服务器上,由Master分配资源对数据进行并行的处理和计算,类似于Yarn环境中NM。

4.2.3 ApplicationMaster (AM) 计算-> AM -> 资源

Hadoop用户向YARN集群提交应用程序时,提交程序中应该包含ApplicationMaster,用于向资源调度器申请执行任务的资源容器Container,运行用户自己的程序任务job,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。

  • 说的简单点就是,ResourceManager(资源)和Driver(计算)之间的解耦合靠的就是ApplicationMaster。

4.3 核心概念

4.3.1 Excutor与Core (核)

四, Spark运行架构_第3张图片

4.3.2 并行度(Parallelism)

  • 在分布式计算框架中一般都是多个任务同时进行,由于任务分布在不同的计算结点进行计算, 所有能够真正的实现多任务并行执行, 记住, 这里是并行, 而不是并发.
  • 这里我们将整个集群并行执行任务的数量称之为并行度, 一个作业的并行度是多少取决于框架的默认配置, 应用程序也可以在运行过程中动态修改;

并行: 同一时刻(某个时间点), 一起执行(parallelism)
并发: 某个时间段, 交替快速执行(Concurrence)

4.3.3 有向无环图(DAG)

四, Spark运行架构_第4张图片
四, Spark运行架构_第5张图片

4.4 Spark提交流程

  • 所谓的提交流程, 其实就是开发人员根据需求写的应用程序通过Spark客户端提交给Spark运行环境执行计算的流程
  • Spark运行架构参见下面示意图:
  1. 构建Spark Application的运行环境(启动SparkContext)
  2. SparkContext向资源管理器(可以是Standalone、Mesos、Yarn)申请运行>3. Executor资源,并启动StandaloneExecutorBackend,executor向 SparkContext申请Task。
  3. SparkContext将应用程序代码发放给executor
  4. SparkContext构建成DAG图、将DAG图分解成Stage、将Taskset发送给Task Scheduler、最后由Task Scheduler将Task发放给Executor运行。
  5. Task在Executor上运行,运行完毕释放所有资源。

四, Spark运行架构_第6张图片

4.4.1 Spark on Standalone运行过程(client模式) (阅读源码后补充)

4.4.2 Spark on YARN 运行过程(cluster模式) (阅读源码后补充)

  • 参考文章: Spark1.0.0 运行架构基本概念

你可能感兴趣的:(#,Spark,scala,开发语言,后端,spark)