Spark资源调度和任务调度

一.资源调度&任务调度

  1.启动集群后,Worker节点会周期性的【心跳】向Master节点汇报资源情况,Master掌握集群资源情况。

  2.当Spark提交一个Application后,根据RDD之间的依赖关系将Application构建成一个DAG有向无环图。

  3.任务提交后,Spark会在Driver端创建两个对象:DAGScheduler和TaskScheduler。

  4.DAGScheduler是任务调度的高层调度器,是一个对象。DAGScheduler的主要作用就是将DAG根据RDD之间的宽窄依赖关系划分为一个个Stage,然后将这些Stage以TaskSet的形式提交给TaskScheduler【TaskScheduler是任务调度的底层调度器,这里TaskSet其实就是一个集合,里面封装的就是一个个的task任务,也就是stage中并行的task任务】。

  5.TaskScheduler会遍历TaskSet集合,拿到对应的task后会将task发送到计算节点Executor上去执行【就是发送到Executor上的线程池ThreadPool上执行】。

  6.Task在Executor线程池中的运行情况会向TaskScheduler反馈,当task运行失败时,则由TaskScheduler负责重试,将task重新发送到Executor去执行,默认重试3次。如果重试3次依然失败,那么这个task所在的Stage就失败了。Stage失败则由DAGScheduler负责重试,重新发送TaskSet到TaskScheduler,Stage默认会重试4次。如果4次以后依然失败,那么这个job就失败了,对应的这个application也失败。

  备注:TaskScheduler不仅负责重试task,还负责重试straggling【执行相比其它任务缓慢的task】task。TaskScheduler会重新启动一个新的task来运行这个缓慢的task执行的处理逻辑。两个task那个先执行完,就以那个task的执行结果为准。这就是spark的推测执行机制。在spark中推测执行默认是关闭的。推测执行可以通过配置spark.speculation属性来配置。

二.图解调度流程

  

三.注意

  1.对于ETL类型要入数据库的业务要关闭推测执行机制,这样就不会又重复的数据入库。

  2.如果遇到数据倾斜的情况,开启推测执行则会有可能导致一直会有task重新启动处理相同的逻辑,任务可能一直处于处理不完的状态。

原文地址:https://www.cnblogs.com/yszd/p/10656699.html

时间: 2024-10-18 04:22:33

Spark资源调度和任务调度的相关文章

Spark 资源调度 与 任务调度

Spark 资源调度与任务调度的流程(Standalone): 启动集群后, Worker 节点会向 Master 节点汇报资源情况, Master掌握了集群资源状况. 当 Spark 提交一个 Application 后, 根据 RDD 之间的依赖关系将 Application 形成一个 DAG 有向无环图. 任务提交后, Spark 会在任务端创建两个对象: DAGSchedular 和 TaskScheduler DAGSchedular 是任务调度的高层调度器, 是一个对象 DAGSch

Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法

Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法 1.spreadOutApp尽量平均分配到每个executor上: 2.非spreadOutApp尽量在使用单个executor的资源. 源码分析 org.apache.spark.deploy.master.Master 1.首先判断,master状态不是ALIVE的话,直接返回2.调度driver3. Application的调度机制(核心之核心,重中之重) 源码如下: 1 /*

第31课:Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结

本課主題 Master 资源调度的源码鉴赏 Spark 的 Worker 是基于什么逻辑去启动 Executor 资源调度管理 任務調度與資源是通過 DAGScheduler.TaskScheduler.SchedulerBackend 等進行的作業調度 資源調度是指應用程序如何獲得資源 任務調度是在資源調度的基礎上進行的,沒有資源調度那麼任務調度就成為了無源之水無本之木 Master 资源调度的源码鉴赏 因為 Master 負責資源管理和調度,所以資源調度方法 scheduer 位於 Mast

Spark 资源调度包 stage 类解析

spark 资源调度包 Stage(阶段) 类解析 类注释: /** * A stage is a set of parallel tasks all computing the same function that need to run as part * of a Spark job, where all the tasks have the same shuffle dependencies. * 一个阶段是所有计算相同功能的并行任务集合, 作为spark作业的一部分, 这些任务都有相同

3.算子+PV&UV+submit提交参数+资源调度和任务调度源码分析+二次排序+分组topN+SparkShell

1.补充算子 transformations ?  mapPartitionWithIndex 类似于mapPartitions,除此之外还会携带分区的索引值. ?  repartition 增加或减少分区.会产生shuffle.(多个分区分到一个分区不会产生shuffle) 多用于增多分区. 底层调用的是coalesce ?  coalesce(合并) coalesce常用来减少分区,第二个参数是减少分区的过程中是否产生shuffle. true为产生shuffle,false不产生shuff

Spark资源调度

一:任务调度和资源调度的区别: 任务调度是指通过DAGScheduler,TaskScheduler,SchedulerBackend完成的job的调度 资源调度是指应用程序获取资源的调度,他是通过schedule方法完成的 二:资源调度解密 因为master负责资源管理和调度,所以资源调度的方法schedule位于master.scala这个了类中,当注册程序或者资源发生改变的都会导致schedule的调用,例如注册程序的时候(包括worker,driver和application的注册等,注

Spark里面的任务调度:离SparkContext开始

SparkContext这是发达国家Spark入学申请,它负责的相互作用和整个集群,它涉及到创建RDD.accumulators and broadcast variables.理解力Spark架构,我们需要从入口开始.下图是图的官方网站. DriverProgram就是用户提交的程序,这里边定义了SparkContext的实例. SparkContext定义在core/src/main/scala/org/apache/spark/SparkContext.scala. Spark默认的构造函

SPARK 资源调度源码总结

Executor在集群中分散启动,有利于task计算的数据本地化 默认情况下(提交任务的时候没有设置--executor-cores选项),每一个Worker为当前的Application启动一个Executor,这个Executor会使用这个Worker的所有的cores和1G内存 如果想在Worker上启动多个Executor,提交Application的时候要加--executor-cores这个选项 默认情况下没有设置--total-executor-cores,一个Applicatio

小记--------spark资源调度机制源码分析-----Schedule

Master类位置所在:spark-core_2.11-2.1.0.jar的org.apache.spark.deploy.master下的Master类 /** * driver调度机制原理代码分析Schedule the currently available resources among waiting apps. This method will be called * every time a new app joins or resource availability change