Spark内部执行机制

1.1 内部执行流程

  如下图1为分布式集群上spark应用程序的一般执行框架。主要由sparkcontext(spark上下文)、cluster manager(资源管理器)和▪executor(单个节点的执行进程)。其中cluster manager负责整个集群的统一资源管理。executor是应用执行的主要进程,内部含有多个task线程以及内存空间。

 
图1 spark分布式部署图

  详细流程图如下图2:

 
 
图2 详细流程图
  • (1) 应用程序在使用spark-submit提交后,根据提交时的参数设置(deploy mode)在相应位置初始化sparkcontext,即spark的运行环境,并创建DAG Scheduler和Task Scheduer,Driver根据应用程序执行代码,将整个程序根据action算子划分成多个job,每个job内部构建DAG图,DAG Scheduler将DAG图划分为多个stage,同时每个stage内部划分为多个task,DAG Scheduler将taskset传给Task Scheduer,Task Scheduer负责集群上task的调度。至于stage和task的关系以及是如何划分的我们后面再详细讲。
  • (2) Driver根据sparkcontext中的资源需求向resource manager申请资源,包括executor数及内存资源。
  • (3) 资源管理器收到请求后在满足条件的work node节点上创建executor进程。
  • (4) Executor创建完成后会向driver反向注册,以便driver可以分配task给他执行。
  • (5) 当程序执行完后,driver向resource manager注销所申请的资源。

下面这张图更好理解:

1.2 job、stage、task的关系

Job、stage和task是spark任务执行流程中的三个基本单位。其中job是最大的单位,Job是spark应用的action算子催生的;stage是由job拆分,在单个job内是根据shuffle算子来拆分stage的,单个stage内部可根据操作数据的分区数划分成多个task。如下图3所示

 
图3 job、stage和task的关系图

2. RDD 的执行流程

上一节我们介绍了spark应用程序的大概执行流程,由于spark应用程序中的数据块基本都是RDD,本节我们来看下应用程序中RDD的执行流程。

2.1 RDD 从创建到执行

RDD从创建到执行的流程如下图4所示

 
图4 RDD执行流程
  • (1) 首先针对一段应用代码,driver会以action算子为边界生成响应的DAG图
  • (2) DAG Scheduler从DAG图的末端开始,以图中的shuffle算子为边界来划分stage,stage划分完成后,将每个stage划分为多个task,DAG Scheduler将taskSet传给Task Scheduler来调用
  • (3) Task Scheduler根据一定的调度算法,将接收到的task池中的task分给work node节点中的executor执行
    这里我们看到RDD的执行流程中,DAG Scheduler和Task Scheduler起到非常关键的作用个,因此下面我们来看下DAG Scheduer和Task Scheduler的工作流程。

2.2 DAG Scheduler工作流程

DAG Scheduler是一个高级的scheduler 层,他实现了基于stage的调度,他为每一个job划分stage,并将单个stage分成多个task,然后他会将stage作为taskSet提交给底层的Task Scheduler,由Task Scheduler执行。
DAG的工作原理如下图5:

 
图5 DAG Scheduler工作流程

  针对左边的一段代码,DAG Scheduler根据collect(action算子)将其划分到一个job中,在此job内部,划分stage,如上右图所示。DAG Scheduler在DAG图中从末端开始查找shuffle算子,上图中将reduceByKey为stage的分界,shuffle算子只有一个,因此分成两个stage。前一个stage中,RDD在map完成以后执行shuffle write将结果写到内存或磁盘上,后一个stage首先执行shuffle read读取数据在执行reduceByKey,即shuffle操作。

2.3 TASK Scheduler工作流程

Task Scheduler是sparkContext中除了DAG Scheduler的另一个非常重要的调度器,task Scheduler负责将DAGS cheduer产生的task调度到executor中执行。如下图6所示,Task Scheduler 负责将TaskSetPool中的task调度到executor中执行,一般的调度模式是FIFO(先进先出),也可以按照FAIR(公平调度)的调度模式,具体根据配置而定。其中FIFO:顾名思义是先进先出队列的调度模式,而FAIR则是根据权重来判断,权重可以根据资源的占用率来分,如可设占用较少资源的task的权重较高。这样就可以在资源较少时,调用后来的权重较高的task先执行了。至于每个executor中同时执行的task数则是由分配给每个executor中cpu的核数决定的。

 
图6 TaskScheduler的工作流程

Spark内部执行机制的更多相关文章

  1. 【JS】JavaScript引擎的内部执行机制

     近期在复习JavaScript,看到setTimeout函数时.想起曾经刚学时,在一本书上看过setTimeout()里的回调函数执行的间隔时间有昌不是后面设置的值.曾经没想太多.网上看了JS大 ...

  2. 【Spark 深入学习 04】再说Spark底层运行机制

    本节内容 · spark底层执行机制 · 细说RDD构建过程 · Job Stage的划分算法 · Task最佳计算位置算法 一.spark底层执行机制 对于Spark底层的运行原理,找到了一副很好的 ...

  3. 2.Spark Streaming运行机制和架构

    1 解密Spark Streaming运行机制 上节课我们谈到了技术界的寻龙点穴.这就像过去的风水一样,每个领域都有自己的龙脉,Spark就是龙脉之所在,它的龙穴或者关键点就是SparkStreami ...

  4. 探索JavaScript执行机制

    前言 不论是工作还是面试,我们可能都经常会碰到需要知道代码的执行顺序的场景,所以打算花点时间彻底搞懂JavaScript的执行机制. 如果这篇文章有帮助到你,️关注+点赞️鼓励一下作者,文章公众号首发 ...

  5. IIS 内部运行机制及Asp.Net执行过程详解

    一直以来对一个Asp.net页面穿过IIS后就返回给浏览器一个HTML页面感觉很是神奇.虽然做技术这么长时间了,也曾经大致了解过一点来龙去脉,但是如果你真的问起我比较详细的过程,我还真的回答不上来,好 ...

  6. 通过案例对 spark streaming 透彻理解三板斧之三:spark streaming运行机制与架构

    本期内容: 1. Spark Streaming Job架构与运行机制 2. Spark Streaming 容错架构与运行机制 事实上时间是不存在的,是由人的感官系统感觉时间的存在而已,是一种虚幻的 ...

  7. 通过案例对 spark streaming 透彻理解三板斧之二:spark streaming运行机制

    本期内容: 1. Spark Streaming架构 2. Spark Streaming运行机制 Spark大数据分析框架的核心部件: spark Core.spark  Streaming流计算. ...

  8. Spark内存管理机制

    Spark内存管理机制 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行 ...

  9. 深入浅出Spark的Checkpoint机制

    1 Overview 当第一次碰到 Spark,尤其是 Checkpoint 的时候难免有点一脸懵逼,不禁要问,Checkpoint 到底是什么.所以,当我们在说 Checkpoint 的时候,我们到 ...

随机推荐

  1. vue组件通讯方法汇总(在不使用vuex的情况下)

    前三种是父子组件通讯,最后一种是平级组件.

  2. 华南理工大学“三七互娱杯”程序设计竞赛(重现赛)( HRY and array 高精度除法模板)

    题目链接:https://ac.nowcoder.com/acm/contest/874/D 题目大意:给你两个数列a和b然后对a可以进行排列,对b可以任意排列,问你sigma(a(i)*b(i))的 ...

  3. mysql 5.7~默认sql_mode解读

    当5.6升级到5.7时,首先要注意的就是sql_mode对业务的影响 大概可以分为几类1 共同支持,如果你的5.6和5.7sql_mode配置支持的交集一样,那么不用考虑2 5.7细说  1 ONLY ...

  4. 2018-2019-2 20165234 《网络对抗技术》 Exp1 PC平台逆向破解

    实验一 PC平台逆向破解 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另 ...

  5. 爬虫 http原理,梨视频,github登陆实例,requests请求参数小总结

    回顾:http协议基于请求响应的方式,请求:请求首行 请求头{'keys':vales} 请求体 :响应:响应首行,响应头{'keys':'vales'},响应体. import socket soc ...

  6. php递归实现一维数组转为指定树状结构 --- 省市区处理

    ### 这两天脑壳痛,一时短路,想不到准备利用递归实现这个需求,最后还是要请教同事,回来自己在实现了一遍,并记录下来 ### 原数据: // { // 广东省: { // 广州市: [ // &quo ...

  7. 2-1、FileBeat入门

    FileBeat入门 要开始使用Filebeat设置,请安装并配置相关产品: 用于存储和索引数据的Elasticsearch. 用户界面的Kibana. 用于解析和增强数据的Logstash(可选). ...

  8. layui报错 "Layui hint: 模块名 xxx 已被占用" 的问题解决方案

    由于扩展模块数量众多, 于是我需要将扩展模块分类到二级文件夹中, 我在页面中是这么写的 <script> layui.extend({ courseTask: 'task/courseTa ...

  9. 饮冰三年-人工智能-Python-29瀑布流

    多适用于:整版以图片为主,大小不一的图片按照一定的规律排列的网页布局. 1:创建model类,并生成数据表 from django.db import models # Create your mod ...

  10. 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。

    /** 转换成XML格式字符串 **/ public static String doXMLStr(Map<String, String> map) { StringBuffer xml_ ...