Spark架构与工作机制

版权声明: https://blog.csdn.net/KamRoseLee/article/details/83583212

Spark架构与工作机制

Spark的架构 — 架构组件概念简介

Spark集群中Master负责集群整体资源管理和调度,Worker负责单个节点的资源管理。Driver程序是应用逻辑执行的起点,而多个Executor用来对数据进行并行处理。

 

Spark的构成:

  • ClusterManager : 在standalone模式中即为,Master :主节点,控制整个集群,监控Worker。在YARN模式中为资源管理器。
  • Worker : 从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为NodeManager,负责计算节点的控制。
  • Driver : 运行Application的main()函数并且创建SparkContext。
  • Executor: 执行器,是为某Application运行在worker node上的一个进程,启动线程池运行任务上。每个Application拥有独立的一组executors。
  • SparkContext : 整个应用的上下文,控制应用的生命周期。
  • RDD:Spark的基本计算单元,一组RDD形成执行的有向无环图RDD Graph。
  • DAG Scheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler。
  • TaskScheduler:将Task分发给Executor执行。
  • SparkEnv : 线程级别的上下文,存储运行时的重要组件的引用。

Spark的架构 — 架构图

Spark的架构 — 集群执行机制

Client 提交应用,Master找到一个Worker启动Driver,Driver向Master或者资源管理器申请资源,之后将应用转化为RDD Graph,再由DAGScheduler将RDD Graph转化为Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor进行执行。任务执行的过程中其他组件再协同工作确保整个应用顺利执行。

 

Spark的工作机制

Spark作业:

  • Application: 用户自定义的Spark程序,用户提交后,Spark为App分配资源将程序转换并执行。     
  • Driver Program :运行Application的main()函数并且创建SparkContext,。
  • RDD Graph:RDD是Spark的核心结构,可以通过一系列算子进行操作(主要有Transformation和Action操作)。当RDD遇到Action算子,将之前的所有算子形成一个有向无环图(DAG),也就是图中的RDD Graph。再在Spark中转化为Job,提交到集群进行执行。一个App中可以包含多Job。
  • Job: 一个RDD Graph触发的作业,往往由Spark Action算子触发,在SparkContext中通过runJob方法向Spark提交Job。
  • Stage:每个Job会根据RDD的宽依赖关系被切分很多Stage,每个Stage中包含一组相同的Task,这一组Task也叫TaskSet。
  • Task: 一个分区对应一个Task,Task执行RDD中对应Stage中所包含的算子。Task被封装好后放入Executor的线程池中执行。

 

Spark的工作机制 — 作业概念

Spark的工作机制 — 程序与作业概念映射

val rawFile = sc.textFile(“README.md”) // Application: 1–6 行

val words = rawFile.flatMap(line => line.split(“       ”)) // Job: 1-5 行

val wordNumber = words.map(w => (w, 1)) // Stage: 1–3 或 5-6 行

val wordCounts = wordNumber.reduceByKey(_ + _)  // Tasks: 1-3 或 5–6行

wordCounts.foreach(println)

wordCounts.saveAsTextFile

Spark的工作机制 — 作业运行流程

Spark运行流程:

  • Spark程序转换
  • 输入数据块
  • 根据调度策略执行各个Stage的Tasks
  • 输出结果返回

 

Spark调度原理

Spark的调度原理 — 作业调度简介

系统的设计很重要的一环便是资源调度。设计者将资源进行不同粒度的抽象建模,然后将资源统一放入调度器,通过一定的算法进行调度,最终要达到高吞吐或者低访问延迟的目的。

Spark有多种运行模式,例如Local模式、Standalone模式、YARN模式、Mesos模式。在集群环境下,为了减少复杂性,抓住系统主要脉络进行理解。本节主要对Standalone模式中的名词进行介绍,其他运行模式中各角色实现的功能基本一致,只不过是在特定资源管理器下使用略为不同的名称和调度机制。

 

Spark的调度原理 — 作业调度简介

Spark的调度原理 — Application调度

Application调度就是组由用户提交到Spark中的作业集合,通过一定的算法,对每个按一定次序分配集群中资源的过程。

  • 例如:

FIFO模式,用户先提交的作业1优先分配需要的资源,之后提交的作业2再分配资源,依次类推。

 

Application调度模式:

  • Standalone :FIFO模式
  • Mesos : 粗粒度模式和细粒度模式
  • YARN : 独占模式

Spark的调度原理 — Job调度

Job调度就是在Application内部的一组Job集合,在Application分配到的资源量下,通过一定的算法,对每个按一定次序分配Application中资源的过程。

  • 例如:

FIFO模式,用户先提交的Job1优先分配需要的资源,之后提交的Job2再分配资源,依次类推。

Job调度模式:

  • FIFO模式
  • FAIR模式

FIFO模式:

默认情况下,Spark的调度器以FIFO(先进先出)的方式调度Job的执行。每个Job被切分为多个stage。第一个Job优先获取所有可用的资源,接下来第二个Job再进行剩余资源获取。这样依次类推,如果第一个Job并没有占用满所有的资源,则第二个Job还可以继续获取剩余资源,这样多个Job可以并行运行。

 

FAIR模式:

在FAIR共享模式调度下,Spark在多Job之间以轮询(round robin)方式给任务进行资源分配,所有的任务拥有大致相当的优先级来共享集群的资源。这就意味着当一个长任务正在执行时,短任务仍可以被分配到资源,提交并执行,并且获得不错的响应时间。这样就不用像以前一样需要等待长任务执行完才可以。这种调度模式很适合多用户的场景。

 

数据本地性:

尽量的避免数据在网络上的传输。

Tasks延时调度机制:

拥有数据的节点当前正被其他的task占用,如果预测当前节点结束当前任务的时间要比移动数据的时间还要少,那么调度会等待,直到当前节点可用。否则移动数据到资源充足节点,分配任务执行。

猜你喜欢

转载自blog.csdn.net/KamRoseLee/article/details/83583212