Spark工作机制及任务调度策略

1、Spark运行架构

1.1、运行架构

        Spark框架的核心是一个计算引擎,整体来说,它采用了标准master-slave的结构。

        如下图所示,它展示了一个Spark 执行时的基本结构。图形中的 Driver 表示 master,负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave,负责实际执行任务。

2.2、Spark核心组件

2.2.1、Driver

         Spark驱动器节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。Driver在Spark作业执行时主要负责:

        (1)将用户程序转化为作业(Job);

        (2)在Executor之间调度任务(Task);

        (3)跟踪Executor的执行情况;

        (4)通过 UI 展示查询运行情况;

2.2.2、Executor

        Spark Executor 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行。

        Executor 有两个核心功能:

        (1)负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程

        (2)它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

2.2.3、Master  & Worker

        Spark 集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master 和 Worker,这里的 Master 是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于 Yarn 环境中的 RM, 而Worker 呢,也是进程,一个 Worker 运行在集群中的一台服务器上,由 Master 分配资源对数据进行并行的处理和计算,类似于 Yarn 环境中 NM。

2.2.4、ApplicationMaster

         Hadoop 用户向 YARN 集群提交应用程序时,提交程序中应该包含 ApplicationMaster,用于向资源调度器申请执行任务的资源容器 Container,运行用户自己的程序任务 job,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。说的简单点就是,ResourceManager(资源)和 Driver(计算)之间的解耦合靠的就是ApplicationMaster。

2.3、核心概念

2.3.1、Executor与Core

        Spark Executor 是集群中运行在工作节点(Worker)中的一个 JVM 进程,是整个集群中的专门用于计算的节点。在提交应用中,可以提供参数指定计算节点的个数,以及对应的资源。这里的资源一般指的是工作节点 Executor 的内存大小和使用的虚拟 CPU 核(Core)数量。

2.3.2、并行度(Parallelism)

        在分布式计算框架中一般都是多个任务同时执行,由于任务分布在不同的计算节点进行计算,所以能够真正地实现多任务并行执行,记住,这里是并行,而不是并发。这里我们将整个集群并行执行任务的数量称之为并行度。那么一个作业到底并行度是多少呢?这个取决于框架的默认配置。应用程序也可以在运行过程中动态修改。

2.3.3、有向无环图(DAG)

         这里所谓的有向无环图,并不是真正意义的图形,而是由 Spark 程序直接映射成的数据流的高级抽象模型。简单理解就是将整个程序计算的执行过程用图形表示出来,这样更直观,更便于理解,可以用于表示程序的拓扑结构。DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环。

2.3.4、提交流程

        所谓的提交流程,其实就是我们开发人员根据需求写的应用程序通过 Spark 客户端提交给Spark 运行环境执行计算的流程。

        

         上图为 Spark 通用运行流程图,体现了基本的 Spark 应用程序在部署中的基本提交流程。这个流程是按照如下的核心步骤进行工作的:

        (1)任务提交后,都会先启动 Driver 程序;

        (2)随后 Driver 向集群管理器注册应用程序;

        (3)之后集群管理器根据此任务的配置文件分配 Executor 并启动;

        (4)Driver 开始执行 main 函数,Spark 查询为懒执行,当执行到 Action 算子时开始反向推算,根据宽依赖进行 Stage 的划分,随后每一个 Stage 对应一个Taskset,Taskset中有多个Task,查找可用资源 Executor 进行调度;

        (5)Task 会被分发到指定的 Executor 去执行,在任务执行的过程中,Executor 也会不断与 Driver 进行通信,报告任务运行情况。

3、Spark任务调度策略

        Driver 线程主要是初始化 SparkContext 对象,准备运行所需的上下文,然后一方面保持与ApplicationMaster 的 RPC 连接,通过 ApplicationMaster 申请资源,另一方面根据用户业务逻辑开始调度任务,将任务下发到已有的空闲 Executor 上。

        当 ResourceManager向ApplicationMaster返回Container资源时,ApplicationMaster 就尝试在对应的 Container 上启动 Executor 进程,Executor 进程起来后,会向 Driver 反向注册,注册成功后保持与 Driver 的心跳,同时等待 Driver 分发任务,当分发的任务执行完毕后,将任务状态上报给 Driver。

3.1、Spark任务调度概述

        当 Driver 起来后,Driver 则会根据用户程序逻辑准备任务,并根据 Executor 资源情况逐步分发任务。在详细阐述任务调度前,首先说明下 Spark 里的几个概念。一个 Spark 应用程序包括 Job、Stage 以及 Task 三个概念:

        (1)Job 是以 Action 方法为界,遇到一个 Action 方法则触发一个 Job;

        (2)Stage 是 Job 的子集,以 RDD 宽依赖(即 Shuffle)为界,遇到 Shuffle 做一次划分;

        (3)Task 是 Stage 的子集,以并行度(分区数)来衡量,分区数是多少,则有多少个 task。

        Spark 的任务调度总体来说分两路进行,一路是 Stage 级的调度,一路是 Task 级的调度。Spark RDD 通过其 Transactions 操作,形成了 RDD 血缘(依赖)关系图,即 DAG,最后通过 Action 的调用,触发 Job 并调度执行,执行过程中会创建两个调度器:DAGScheduler和 TaskScheduler。

        (1)DAGScheduler 负责 Stage 级的调度,主要是将 job 切分成若干 Stages,并将每个 Stage打包成 TaskSet 交给 TaskScheduler 调度。

        (2)TaskScheduler负责Task级的调度,将DAGScheduler 给过来的TaskSet按照指定的调度策略分发到 Executor 上执行,调度过程中 SchedulerBackend 负责提供可用资源,其中SchedulerBackend 有多种实现,分别对接不同的资源管理系统。

        Driver初始化SparkContext过程中,会分别初始化DAGScheduler、TaskScheduler、SchedulerBackend以及HeartbeatReceiver,并启动SchedulerBackend以及 HeartbeatReceiver。SchedulerBackend 通过 ApplicationMaster 申请资源,并不断从 TaskScheduler 中拿到合适的Task 分发到 Executor 执行。HeartbeatReceiver 负责接收 Executor 的心跳信息,监控 Executor的存活状况,并通知到 TaskScheduler。

3.2、Spark  Stage级调度

        Spark 的任务调度是从 DAG 切割开始,主要是由 DAGScheduler 来完成。当遇到一个Action 操作后就会触发一个 Job 的计算,并交给 DAGScheduler 来提交,下图是涉及到 Job提交的相关方法调用流程图。

        

         (1)Job由最终的RDD和Action方法封装而成;

        (2)SparkContext将Job交给DAGScheduler提交,它会根据RDD的血缘关系构成的DAG进行切分,将一个 Job 划分为若干 Stages,具体划分策略是,由最终的 RDD 不断通过依赖回溯判断父依赖是否是宽依赖,即以 Shuffle 为界,划分 Stage,窄依赖的 RDD 之间被划分到同一个 Stage 中,可以进行 pipeline 式的计算。划分的 Stages 分两类,一类叫做 ResultStage,为 DAG 最下游的 Stage,由 Action 方法决定,另一类叫做ShuffleMapStage,为下游 Stage 准备数据。

        一个 Stage 是否被提交,需要判断它的父 Stage 是否执行,只有在父 Stage 执行完毕才能提交当前 Stage,如果一个 Stage 没有父 Stage,那么从该 Stage 开始提交。Stage 提交时会将 Task 信息(分区信息以及方法等)序列化并被打包成 TaskSet 交给 TaskScheduler,一个Partition 对应一个 Task,另一方面 TaskScheduler 会监控 Stage 的运行状态,只有 Executor 丢失或者 Task 由于 Fetch 失败才需要重新提交失败的 Stage 以调度运行失败的任务,其他类型的 Task 失败会在 TaskScheduler 的调度过程中重试。

        相对来说 DAGScheduler 做的事情较为简单,仅仅是在 Stage 层面上划分 DAG,提交Stage 并监控相关状态信息。TaskScheduler 则相对较为复杂,下面详细阐述其细节。

3.3、Spark Task级调度

        Spark Task 的调度是由 TaskScheduler 来完成,由前文可知,DAGScheduler 将 Stage 打包到交给 TaskScheTaskSetduler,TaskScheduler 会将 TaskSet 封装为 TaskSetManager 加入到调度队列中,TaskSetManager 结构如下图所示。

         

    TaskSetManager 负责监控管理同一个 Stage 中的 Tasks,TaskScheduler 就是以TaskSetManager 为单元来调度任务。

        前面也提到,TaskScheduler 初始化后会启动 SchedulerBackend,它负责跟外界打交道,接收 Executor 的注册信息,并维护 Executor 的状态,同时它在启动后会定期地去“询问”TaskScheduler 有没有任务要运行,TaskScheduler 在 SchedulerBackend“问”它的时候,会从调度队列中按照指定的调度策略选择 TaskSetManager 去调度运行,大致方法调用流程如下图所示:

         上图中,将 TaskSetManager 加入 rootPool 调度池中之后,调用 SchedulerBackend 的reviveOffers 方法给 driverEndpoint 发送 ReviveOffer 消息;driverEndpoint 收到 ReviveOffer 消息后调用 makeOffers 方法,过滤出活跃状态的 Executor(这些 Executor 都是任务启动时反向注册到Driver的Executor),然后将Executor封装成WorkerOffer对象;准备好计算资源(WorkerOffer)后,taskScheduler 基于这些资源调用 resourceOffer 在 Executor 上分配 task。

岁月的拾荒者
关注 关注
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
spark工作机制
樛木
02-10 688
1 spark应用执行机制 1.1 spark如何运行作业 1.2 spark执行的底层实现原理 spark底层实现中通过RDD实现数据管理 利用BlockManger实现对RDD的块管理 延迟执行,节省内存 图 调度器将包含操作的任务分发到指定的机器执行,在计算节点通过多线程的方式执行任务。 ...
spark基础知识选择、判断、简答题。
weixin_43793040的博客
06-08 1万+
** # spark相关题目 ** 1、 持久化RDD的存储级别中,将RDD分区全部存储到磁盘上的存储级别是()。 A、MEMORY_ONLY B、MEMORY_AND_DISK C、DISK_ONLY D、MEMORY_ONLY_SER 参考答案: C 答案解析: 暂无解析 2、 当MemStore存储的数据达到一个阀值()时,数据就会被进行flush操作,将数据写入到StoreFile文件。 A、64M B、128M C、256M D、512M 参考答案: B 答案解析: 暂无解析 3、 下列选项中
Spark 任务调度机制
weixin_30836759的博客
07-10 189
4.Spark 任务调度机制 在工厂环境下,Spark 集群的部署方式一般为 YARN-Cluster 模式,之后的内核 分析内容中我们默认集群的部署方式为 YARN-Cluster 模式。 4.1 Spark 任务提交流程 在上一章中我们讲解了 Spark YARN-Cluster 模式下的任务提交流程, 如下图所示: 下面的时序图清晰地说明了一个 Sp...
Spark 工作机制
最新发布
m0_57261404的博客
06-05 243
Spark通过RDD的弹性容错机制实现容错性,当Executor发生故障时,可以根据RDD的血统(Lineage)重新计算丢失的数据。通过以上工作机制Spark实现了高效的大数据处理和计算,支持复杂的数据处理任务和机器学习算法,并在大规模数据集上展现出优秀的性能和扩展性。- **Driver**:Spark应用程序的主节点,负责创建SparkContext、定义作业的执行流程和任务划分。- **Executor**:Spark应用程序的工作节点,负责执行具体的任务和计算。
xxl-job集群的任务调度策略优化_我的想法
lanicc's blog
06-16 1739
xxl-job集群任务调度的优化想法
Spark内核篇03】Spark任务调度机制1
08-04
Spark的这种任务调度机制旨在最大化数据局部性,减少不必要的数据传输,提高计算效率,同时能够灵活适应不同的资源管理和调度策略。通过深入理解这个机制,我们可以更好地优化Spark应用,提升大数据处理的性能。
Python3实战Spark大数据分析及调度-第6章 Spark Core进阶.zip
04-30
Spark Core不仅负责任务调度、内存管理,还包含了分布式数据存储和错误恢复机制,是Spark其他模块如Spark SQL、Spark Streaming和MLlib等构建在之上的基石。 首先,我们需要理解Spark的运行模型,它基于弹性分布式...
Python3实战Spark大数据分析及调度-第7章 Spark Core调优.zip
04-30
3. **任务调度**:了解Task Scheduler的工作原理,如Stage划分、Task分配策略以及如何通过`spark.locality.wait`参数提高数据本地性,减少网络传输开销,从而提升效率。 4. **Executor配置**:我们将会讨论如何调整...
Spark内核机制解析及性能调优
05-23
本资料《Spark内核机制解析及性能调优》深入探讨了Spark的核心原理以及如何对其进行优化,以提升大数据处理的效率。 首先,Spark的核心组件包括Driver、Executor、RDD(弹性分布式数据集)和DAG Scheduler。Driver...
java提交spark任务到yarn平台的配置讲解共9页.pdf.zip
10-28
在这个过程中,开发者需要理解多个关键概念和配置步骤,以便有效地调度和运行Spark作业。下面将详细阐述这一过程的主要知识点。 1. **Spark与YARN**: Spark是一个快速、通用且可扩展的大数据处理框架,它提供了...
Spark Streaming数据处理流程与工作机制
晓晓的天空
03-20 1829
Spark Streaming数据处理流程与工作机制
Spark的架构和任务调度
CatherineHuangTT的博客
11-23 653
Spark任务调度顺序: 1.首先我们会选择集群中的一台机器去提交我们的代码,我们提交的这个代码就是一个application 2.如果是client的模式,会在提交任务的这台机器上面开启一个driver线程,如果是cluster的模式,会随机选择一台机器开启driver线程,driver开启以后,就开始打算执行提交的代码,开启driver的时候对SparkContext进行初始化,
Spark大数据分析与实战课后答案
热门推荐
BIPT919的博客
06-09 2万+
Spark大数据分析实战课后答案
spark任务运行流程及内部任务的调度机制
Mr.pan felix的专栏
07-13 1195
原文链接:https://juejin.im/post/5e7485e76fb9a07caf447f12 本文将针对spark中的Driver和Executor讲起,简述了spark的运行流程,部署模式以及内部任务调度机制,希望针对spark任务执行过程进行尽可能好理解的解析 1.两个重要的主角 ​ 在spark中,有两个重要的主角是绕不开的,driver和executor,他们的结构呈一主多从模式,driver就是那个单身狗,控制欲很强,权利也很大,每天独自一人没别的事,就想法设法的指挥着手下一
Spark任务调度
张包峰的博客
12-11 1万+
本文尝试从源码层面梳理Spark任务调度与资源分配上的做法。
Spark 资源调度及任务调度
weixin_30852451的博客
06-04 127
1、 资源分配 通过SparkSubmit进行提交应用后,首先会创建Client将应用程序(字节码文件.class)包装成Driver,并将其注册到Master。Master收到Client的注册请求后将其加入待调度队列waitingDrivers,并等待分配执行资源。 1.1 Dirver调度(分配Driver执行容器,1个) Master中调度...
Spark运行机制与原理详解
Handoking的博客【学无止境】
07-17 5069
先上图(自己画的有点丑) 这个就是Spark运行的基本流程图。 或者看这个图 可以看出Spark运行经过以下几个阶段: 1.用户编写好SparkContext,新创建的SparkContext连接资源管理器cluster manager,其实Spark的还有其他优秀的资源管理器可以用,比如Standalone,Apache Mesos,YARN等。资源管理器根据用户提交SparkC...
谈谈任务调度的四种实现方式
HouXinLin_CSDN的博客
05-19 8197
一、什么是任务调度 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务,本文会介绍Timer、ScheduledExecutor、Quartz、Spring Boot中的调度模块使用。 二、Timer Timer任务调度的核心类是 Timer 和 TimerTask。其中Timer负责设定TimerTask的起始与间隔执行时间。使用者只需要创建一个 TimerTask 的继承类,实现自己的run方法,然后将其丢给 Timer 去执行即可。 下面的例子每隔半秒执行run中的方法,输出当前时间
Spark调度机制深度解析
Spark 的调度系统是一个复杂而高效的框架,通过将复杂的计算任务拆分为可并行执行的 Stage 和 Task,再通过优化的调度策略,确保在分布式环境中快速、有效地完成计算。理解这些原理对于优化 Spark 作业性能、提高...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Spark工作机制及任务调度策略 1473
  • 五大常用算法之五:分支限界法 923
  • Spark性能调优 784
  • java容器与集合 360
  • 五大常用算法之四:回溯法 273

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Spark性能调优
  • 五大常用算法之五:分支限界法
  • 五大常用算法之四:回溯法
2021年2篇
2018年8篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码深圳网站优化按天扣费南联网络推广爱联优秀网站设计南澳网站搭建双龙高端网站设计龙岗网站优化按天扣费宝安百姓网标王推广惠州标王爱联网站制作设计大鹏网站推广方案爱联网站推广方案坪山SEO按天扣费塘坑seo网站优化塘坑seo网站优化宝安建网站福永网站排名优化大芬建网站丹竹头网站建设西乡网站推广工具木棉湾百搜标王永湖关键词按天收费光明关键词排名布吉百度关键词包年推广观澜seo优化观澜关键词排名包年推广福田如何制作网站龙华网站推广工具深圳品牌网站设计宝安网站建设吉祥网站搭建歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化