【Spark】Spark应用执行机制

原创 2015年07月08日 14:26:18

Spark应用概念

Spark应用(Application)是用户提交的应用程序。执行模式又Local、Standalone、YARN、Mesos。根据Spark Application的Driver Program是否在集群中运行,Spark应用的运行方式又可以分为Cluster模式和Client模式。
下面是Spark应用涉及的一些基本概念:

  • Application:Spark 的应用程序,用户提交后,Spark为App分配资源,将程序转换并执行,其中Application包含一个Driver program和若干Executor
  • SparkContext:Spark 应用程序的入口,负责调度各个运算资源,协调各个 Worker
    Node 上的 Executor
  • Driver Program:运行Application的main()函数并且创建SparkContext
  • RDD Graph:RDD是Spark的核心结构, 可以通过一系列算子进行操作(主要有Transformation和Action操作)。当RDD遇到Action算子时,将之前的所有算子形成一个有向无环图(DAG)。再在Spark中转化为Job,提交到集群执行。一个App中可以包含多个Job
  • Executor:是为Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。每个Application都会申请各自的Executor来处理任务
  • Worker Node:集群中任何可以运行Application代码的节点,运行一个或多个Executor进程

下面介绍Spark Application运行过程中各个组件的概念:

  • Job:一个RDD Graph触发的作业,往往由Spark Action算子触发,在SparkContext中通过runJob方法向Spark提交Job
  • Stage:每个Job会根据RDD的宽依赖关系被切分很多Stage, 每个Stage中包含一组相同的Task, 这一组Task也叫TaskSet
  • Task:一个分区对应一个Task,Task执行RDD中对应Stage中包含的算子。Task被封装好后放入Executor的线程池中执行
  • DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler
  • TaskScheduler:将Taskset提交给Worker node集群运行并返回结果

Spark执行机制概况

Spark应用转换

RDD的Action算子触发Job的提交,提交到Spark中的Job生成RDD DAG,由DAGScheduler转化为Stage DAG,每个Stage中产生相应的Task集合,TaskScheduler将任务分发到Executor执行。 每个任务对应相应的一个数据块,使用用户定义的函数处理数据块。

Spark执行的底层实现

在Spark的底层实现中,通过RDD进行数据的管理,RDD中有一组分布在不同节点的数据块,当Spark的应用在对这个RDD进行操作时,调度器将包含操作的任务分发到指定的机器上执行,在计算节点通过多线程的方式执行任务。一个操作执行完毕,RDD便转换为另一个RDD,这样,用户的操作依次执行。Spark为了系统的内存不至于快速用完,使用延迟执行的方式执行,即只有操作累计到Action(行动),算子才会触发整个操作序列的执行,中间结果不会单独再重新分配内存,而是在同一个数据块上进行流水线操作。

Spark实现了分布式计算和任务处理,并实现了任务的分发、跟踪、执行等工作,最终聚合结果,完成Spark应用的计算。
对RDD的块管理通过BlockManger完成,BlockManager将数据抽象为数据块,在内存或者磁盘进行存储,如果数据不在本节点,则还可以通过远端节点复制到本机进行计算。
在计算节点的执行器Executor中会创建线程池,这个执行器将需要执行的任务通过线程池并发执行。

应用提交和执行方式

应用的提交包含以下两种方式:
* Driver进程运行在客户端,对应用进行管理监控
* 主节点指定某个Worker节点启动Driver,负责整个应用的监控

Driver进程是应用的主控进程,负责应用的解析、切分Stage并调度Task到Executor执行,包含DAGScheduler等重要对象。
下面是具体的介绍:

Driver进程运行在客户端


该方式应用执行流程:

  1. 用户启动客户端,之后客户端运行用户程序,启动Driver进程。在Driver中启动或实例化DAGScheduler等组件。 客户端的Driver向Master注册。
  2. Worker向Master注册,Master命令Worker启动Exeuctor。Worker通过创建ExecutorRunner线程,在ExecutorRunner线程内部启动ExecutorBackend进程。
  3. ExecutorBackend启动后,向客户端Driver进程内的SchedulerBackend注册,这样Driver进程就能找到计算资源。Driver的DAGScheduler解析应用中的RDD DAG并生成相应的Stage,每个Stage包含的TaskSet通过TaskScheduler分配给Executor。 在Executor内部启动线程池并行化执行Task。

Driver进程在Worker节点运行


该方式应用执行流程:

  1. 用户启动客户端,客户端提交应用程序给Master。
  2. Master调度应用,针对每个应用分发给指定的一个Worker启动Driver,即Scheduler-Backend。 Worker接收到Master命令后创建DriverRunner线程,在DriverRunner线程内创建SchedulerBackend进程。Driver充当整个作业的主控进程。Master会指定其他Worker启动Exeuctor,即ExecutorBackend进程,提供计算资源。流程和上面很相似,Worker创建ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程。
  3. ExecutorBackend启动后,向Driver的SchedulerBackend注册,这样Driver获取了计算资源就可以调度和将任务分发到计算节点执行。SchedulerBackend进程中包含DAGScheduler,它会根据RDD的DAG切分Stage,生成TaskSet,并调度和分发Task到Executor。对于每个Stage的TaskSet,都会被存放到TaskScheduler中。TaskScheduler将任务分发到Executor,执行多线程并行任务。

转载请注明作者Jason Ding及其出处
GitCafe博客主页(http://jasonding1354.gitcafe.io/)
Github博客主页(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)
Google搜索jasonding1354进入我的博客主页

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

spark Driver进程不退出导致的临时文件爆盘问题

在做的项目里面已经开始用到spark,其中一个项目的场景是这样的: activeMq

Spark 任务调度之Submit Driver

介绍在Standalone模式下,从命令行使用spark-submit提交任务开始,到将Driver提交到Master的过程。

spark部署、计算模型、内部执行原理、工作机制详解

1、spark的安装和部署

spark性能调优之提高并行度

并行度就是Spark作业中,各个stage的task数量,也就代表了Spark作业的在各个阶段(stage)的并行度。 如果不调节并行度,导致并行度过低,会怎么样? 假设,现在已经在spark-s...

Spark疑问3之spark 如何并行执行多个Job?

使用Spark的时候一般都是一个application的Job串行执行,如何并行执行? 如何提高spark对计算资源(CPU和内存等)的利用率? 1M数据10个action或者更多的action,...

Spark-存储机制.pdf

  • 2017-08-18 10:01
  • 793KB
  • 下载

SPARK内存管理机制最全!

  • 2017-08-22 16:55
  • 479KB
  • 下载

Spark定制班第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错

这一课,我们从作业和容错的角度来理解spark streaming。 本期内容 1 Spark Streaming Job 架构和运行机制 2 Spark Streaming Job 容...

Spark-shuffle机制.pdf

  • 2017-08-18 09:39
  • 7.16MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)