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】Spark应用执行机制相关推荐

  1. 第35课: 打通Spark系统运行内幕机制循环流程

    第35课: 打通Spark系统运行内幕机制循环流程 Spark通过DAGScheduler面向整个Job划分出了不同的Stage,划分Stage之后,Stage从后往前划分,执行的时候从前往后执行,每 ...

  2. 一、Spark内核之运行机制

    Spark内核系列目录 一.Spark内核的运行机制 二.Spark内核的通讯架构 文章目录 Spark内核系列目录 前言 一.Spark核心组件 1.Driver 2. Executor 3. Sp ...

  3. Spark系列之Spark应用程序运行机制

    声明:         文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除.感谢.转载请注明出处,感谢. By luoye ...

  4. Spark一级资源调度Shedule机制及SpreadOut模式源码深入剖析

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...

  5. oracle 与 client端执行结果不一致_不同模式下Spark应用的执行过程

    根据应用执行的3个阶段,不同执行模式下各个阶段的执行逻辑不相同,本文分析不同模式下的执行逻辑. Yarn-Client模式的执行流程 Yarn的组成 Yarn是hadoop自带的资源管理框架,它的设计 ...

  6. sparkstreaming监听hdfs目录如何终止_Spark笔试题:Spark Streaming 反压机制

    Spark Streaming 反压机制是1.5版本推出的特性,用来解决处理速度比摄入速度慢的情况,简单来讲就是做流量控制.当批处理时间(Batch Processing Time)大于批次间隔(Ba ...

  7. plsql如何执行存储过程_如何理解Spark应用的执行过程

    从Spark应用的提交到执行完成有很多步骤,为了便于理解,我们把应用执行的整个过程划分为三个阶段.而我们知道Spark有多种运行模式,不同模式下这三个阶段的执行流程也不相同. 本文介绍这三个阶段的划分 ...

  8. Spark Streaming的工作机制

    1. Spark Streaming的工作机制 Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理. 支持从多种数据源获取数据,包括K ...

  9. spark提交到yarn_如何理解Spark应用的执行过程

    从Spark应用的提交到执行完成有很多步骤,为了便于理解,我们把应用执行的整个过程划分为三个阶段.而我们知道Spark有多种运行模式,不同模式下这三个阶段的执行流程也不相同. 本文介绍这三个阶段的划分 ...

最新文章

  1. 建模准备一定要做的这几件事
  2. 从 WordCount 到 MapReduce 计算模型
  3. 堆排序(heap_sort)
  4. war包部署-打包测试
  5. 博客搜索引擎索引博文数量分析与评估
  6. CSS自定义文件上传按钮
  7. xshell/putty 连接 linux 虚拟机 connection failed 的解决方案
  8. 混合汇编 src-control
  9. Java之StringUtils的常用方法(非常不错)
  10. Dubbo透传traceId/logid的一种思路
  11. 服务器如何选择固态硬盘,服务器固态硬盘如何挑选?
  12. Python使用Opencc库完成字符繁简体转换
  13. 岛田庄司《占星术杀人魔法》读后感
  14. 如何使用容器镜像服务 TCR 轻松实现容器 DevOps
  15. 了解MVP(最小可行产品) - 以及为什么我更喜欢最早的可测试/可用/可爱
  16. codeMirror使用记录
  17. webstorm 2018 激活破解方法大全 亲测第三个有用
  18. java命令行打包war_命令行打包 war文件
  19. macOS终端字体颜色DIY教程
  20. Android多媒体支撑库OpenCore视频硬件加速

热门文章

  1. 剔除数组中的相同元素
  2. vi编辑器的学习使用(二十)
  3. C语言-按照单词反转字符串(完整代码)
  4. 记一次生产数据库系统内存使用过高的案例
  5. Oracle放大招:MySQL 即将支持 Hash Join
  6. 数据恢复 - ORA-600 18018错误的重现和修复
  7. 鸿蒙轻内核源码分析:虚拟文件系统 VFS
  8. 解析ThreadPoolExecutor类是如何保证线程池正确运行的
  9. 云小课|ModelArts Pro 视觉套件:零代码构建视觉AI应用
  10. 华为前端工程师分享:查明网站访问故障原因,教你4招快速应对