【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进入我的博客主页

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

第7讲:Spark的运行机制和RDD详解

Spark运行原理spark是一个分布式,基于内存的适合迭代计算的大数据计算框架。基于内存也可以基于磁盘,它适于任何规模的数据的计算。...
  • Diamonds_ys
  • Diamonds_ys
  • 2016年08月23日 16:25
  • 1338

Spark架构设计和运行机制简述

基本概念介绍: Driver : 是用户编写的数据处理逻辑,这个逻辑包含用户创建的SparkContext SparkContext:是用户逻辑与Spark集群主要的交互接口,它会...
  • snail_gesture
  • snail_gesture
  • 2015年11月07日 18:52
  • 690

spark:架构+运行机制的一些总结--50

Hadoop中包含计算框架MapReduce和分布式文件系统HDFS,spark是一个计算框架 // 中间结果:spark保存到内存、Hadoop保存到磁盘,spark将执行模型抽象为通用的有向无...
  • fenger1943
  • fenger1943
  • 2015年06月25日 09:57
  • 1582

Spark应用执行机制

Spark应用概念 Spark应用(Application)是用户提交的应用程序。执行模式又Local、Standalone、YARN、Mesos。根据Spark Application的Drive...
  • wwwxxdddx
  • wwwxxdddx
  • 2016年04月07日 16:51
  • 2404

【Spark系列】三、Spark工作机制

Spark工作机制 Client Driver程序 Spark Context ...
  • zkq_1986
  • zkq_1986
  • 2017年01月26日 20:06
  • 539

5分钟深入spark运行机制

转载-包子铺里聊it 因为这篇文章说的简单明了,感觉有必要学习下哈…… 其中有写概念我会加入我自己的理解(个人见解啊)。 关键概念 spark的关键就是引入了RDD,resilient dis...
  • wangqi880
  • wangqi880
  • 2015年11月22日 21:52
  • 1135

SparkStreaming运行机制和架构详解

本篇博文将从以下几点组织文章: 1. 解密Spark Streaming运行机制 2. 解密Spark Streaming架构 一:解密Spark Streaming运行机制 1. DA...
  • snail_gesture
  • snail_gesture
  • 2016年05月08日 14:36
  • 2803

spark工作机制

spark这里以wordcount程序为例,演示spark的基本流程和原理基本概念 RDD:弹性分布式数据集。数据存放在各个节点上。spark对RDD进行操作。 算子:各种操作/行动。spark中的函...
  • u011283591
  • u011283591
  • 2017年03月23日 16:58
  • 585

Spark源码分析(1) 从WordCount示例看Spark延迟计算原理

WordCount示例: val file = spark.textFile("hdfs://...") val counts = file.flatMap(line => line....
  • josephguan
  • josephguan
  • 2014年05月12日 19:49
  • 3209

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

使用Spark的时候一般都是一个application的Job串行执行,如何并行执行? 如何提高spark对计算资源(CPU和内存等)的利用率? 1M数据10个action或者更多的action,...
  • bob601450868
  • bob601450868
  • 2016年05月19日 18:41
  • 3216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Spark】Spark应用执行机制
举报原因:
原因补充:

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