`
扬州老鬼
  • 浏览: 305583 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Spark的TaskScheduler和DagScheduler

阅读更多
原创,转载请注明出处。

开始研究神奇的spark。会陆续将研究的心得放上来。

在Spark中一个核心的是模块就是调度器(Scheduler),在spark中Scheduler有两种TaskScheduler(是低级的调度器接口),DagScheduler(是高级的调度)

我们在创建SparkContext对象的时候,sparkcontext内部就会创建TaskScheduler和DagScheduler,奇迹从此就发生了。

其中TaskScheduler和DagScheduler的关系。
  DagScheduler:DagScheduler是一个高级的scheduler 层,他实现了基于stage的调度,他为每一个job都计算stage,跟踪哪一个rdd和stage的输出被物化(固化),以及寻找到执行job的最小的调度,然后他会将stage作为tasksets提交给底层的TaskScheduler,由TaskScheduler执行。
  除了计算stage的DAG图之外,这个调度器会决定运行task的最优的位置,这是根据当前的cache 状态,并且把这些状态传递给TaskScheduler。而且,他会在shuffle的输出出现错误(比如输出文件丢失)的时候处理失败,这时,之前老的stage就需要被重做。对于并不是由于shuffle file的丢失而造成的stage的失败,这中失败由TaskScheduler,此时TaskScheduler会在取消整个stage之前重试几次task,若重试的几次都失败了,那就会取消stage。
  TaskScheduler:每一个taskScheduler只为一个单独的SparkContext进行调度安排tasks,DAGScheduler会为每一个stage向TaskScheduler提交Tasksets(也就是说TaskSets是在DAGScheduler完成组装),TaskScheduler会负责向cluster发送tasks,并且调用backend来运行task。并且在tasks失败的时候,重试,然后会将运行task,重试task的事件返回给DAGScheduler。
     所以要研究Spark的任务调度,以及执行,需要从DagScheduler-->TaskScheduler进行研究。

在Spark内部TaskScheduler的种类:
1.TaskSchedulerImpl(该调度器,实现基于moses、local、local-cluster、simr的调度)。该类还支持启动speculative task
2.YarnClientClusterScheduler
3.YarnClusterScheduler
其中YarnClientClusterScheduler和YarnClusterScheduler就是基于Yarn资源调度。

TaskScheduler中实际执行task时会调用Backend.reviveOffers,在spark内有多个不同的backend:
1.LocalBackend
2.SparkDeploySchedulerBackend
3.CoarseGrainedSchedulerBackend
4.MesosSchedulerBackend
5.YarnClientSchedulerBackend
6.SimrSchedulerBackend

参考:
1.Spark官网:https://spark.apache.org/docs/0.9.0
2.Spark源代码
3.白硕:http://baishuo491.iteye.com/
4.http://jerryshao.me/architecture/2013/04/21/Spark%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E4%B9%8B-scheduler%E6%A8%A1%E5%9D%97/
另:此博客开始,我会在每篇文章中尽量把所有的引用都明确付贴进去,以表示对他人的尊敬。
1
1
分享到:
评论

相关推荐

    Apache Spark源码走读之3 -- Task运行期之函数调用关系分析

    @volatile private[spark] var dagScheduler = new DAGScheduler(taskScheduler) dagScheduler.start() ``` **步骤4**:启动Web UI,以便用户监控和调试。 #### RDD转换过程分析 接下来通过一个简单的WordCount...

    spark初始化源码阅读sparkonyarn的client和cluster区别

    SparkContext 的主要工作包括创建 SparkEnv、TaskScheduler 和 DagScheduler。 DriverActor 是 Client 端的 Actor,负责与 Cluster 端的 Master 节点通信。DriverActor 通过 SparkContext 创建 TaskScheduler,Task...

    spark 的schedule的原理

    通过DAGScheduler和TaskScheduler的协同工作,Spark可以有效地将大数据处理工作分配给集群中的各个节点,同时利用集群资源进行高效的任务执行。不仅如此,Spark的调度器还内置了容错机制,确保了数据处理任务在遇到...

    【Spark内核篇03】Spark任务调度机制1

    Driver通过DAGScheduler和TaskScheduler的协作,将计算任务分发到Executor上,并通过HeartbeatReceiver监控Executor的状态。 Spark的调度流程如下: 1. 用户编写Spark程序,包含Action操作。 2. SparkContext接收到...

    SPARK源代码

    `org.apache.spark.scheduler.TaskScheduler`接口及其实现类如`org.apache.spark.scheduler.cluster.YarnClusterScheduler`和`org.apache.spark.scheduler.local.LocalScheduler`展示了如何根据不同的部署模式进行...

    Spark 学习之路,包含 Spark Core,Spark SQL,Spark Streaming,Spark mllib 学

    在 Spark 调度中最重要的是 DAGScheduler 和 TaskScheduler 两个调度器,其中,DAGScheduler 负责任务的逻辑调度, 将作业拆分为不同阶段的具有依赖关系的任务集。TaskScheduler 则负责具体任务的调度执行...

    spark-2.4.3源码

    6. **任务调度**:`org.apache.spark.scheduler.TaskScheduler`是任务调度的入口,它负责将任务分发到Executor上执行。`org.apache.spark.scheduler.TaskSetManager`则是对单个任务集的管理。 7. **Executor**:...

    精通Spark内核

    2,精通RDD、DAGScheduler、TaskScheduler和Worker节点内部的工作的每一步的细节; 3,精通Job的逻辑执行和物理执行; 4,精通Shuffle、Cache、Checkpoint和Broadcast 掌握此阶段即可跻身于Spark内核高手之列!

    4 Spark架构及内部实现剖析.pdf

    Spark的任务调度器分为两个组件:DAGScheduler和TaskScheduler。DAGScheduler负责将DAG图分解成一系列的stage,并将stage以DAGTaskSet的形式提交给TaskScheduler。TaskScheduler负责将task分配到worker节点上执行。...

    Spark简介以及其生态圈

    在这个过程中,DAGScheduler和TaskScheduler负责任务的调度。DAGScheduler将用户程序转换为Stage的有向无环图(DAG),而TaskScheduler负责将这些Stage拆分成Task,并将Task发送到相应的Executor上执行。 在Spark的...

    Spark技术内幕 深入解析Spark内核架构设计与实现原理

    再者,Spark的调度系统包括了DAGScheduler和TaskScheduler两部分。DAGScheduler将DAG划分为Stage,并管理Stage间的依赖。TaskScheduler则负责将任务分配到Executor上执行,它支持多种资源调度器,如FIFO、Fair ...

    spark-2.4.0源码

    8. **DAGScheduler和TaskScheduler**:Spark的调度系统,DAGScheduler将用户作业转化为Stage,而TaskScheduler负责将Stage分解为任务并在Executor上执行。 9. **YARN和Mesos集成**:Spark可以运行在Hadoop的YARN或...

    Spark-内核源码解析.docx

    TaskScheduler 是任务调度器,将 Tasks 传给底层调度器,如 spark-cluster TaskScheduler、yarn-cluster YarnClusterScheduler、yarn-client YarnClientClusterScheduler 等。TaskScheduler 负责将 Task 传给 Worker...

    Spark运行架构和解析

    - **作用**: 作为Stage的执行单元,由TaskScheduler管理。 **4. Task** - **定义**: 最小的可执行单元,由Executor执行。 - **作用**: 完成具体的计算逻辑。 #### 三、Spark运行架构详解 ##### 3.1 DAG ...

    深入理解Spark核心思想与源码分析

    DAGScheduler与TaskScheduler** DAGScheduler将用户提交的任务拆分为Stage(有向无环图),每个Stage进一步拆分成Task。TaskScheduler负责将这些Task分发到Executor上执行。 **5. Spark SQL** Spark SQL是Spark的...

    超详细Spark思维导图

    DAGScheduler将任务分解为Stage,而TaskScheduler则负责将Stage提交到Executor上执行。了解调度机制有助于理解Spark如何处理任务并发和资源分配。 这个思维导图不仅覆盖了Spark的主要功能,还深入到每个领域的核心...

    Spark源码分析.pdf

    3. 调度系统:分析DAGScheduler和TaskScheduler的工作流程,理解如何优化任务执行。 4. 内存管理:讨论Spark如何在内存和磁盘之间进行数据交换,以及如何配置内存参数以提高性能。 5. Shuffle过程:深入理解数据重排...

    ApacheSpark设计与实现.pdf+ApacheSpark源码剖析.pdf+Spark原著中文版.pdf

    2. **调度机制**:DAGScheduler和TaskScheduler的工作流程,如何调度任务到Executor。 3. **存储系统**:BlockManager如何管理内存和磁盘上的数据,以及如何与Shuffle服务交互。 4. **网络通信**:Akka在Spark中的...

    spark内核揭秘

    2. 任务调度:Spark的工作调度由DAGScheduler和TaskScheduler共同完成,DAGScheduler将作业分解为Stage(有向无环图),TaskScheduler负责将Stage的任务分配到Executor上执行。 3. 存储系统:Spark支持多种存储选项...

    spark 源码解读迷你书

    2. **任务调度**:Spark的任务调度系统包括DAGScheduler和TaskScheduler两部分。DAGScheduler将用户操作转化为Stage,而TaskScheduler负责将Stage分解为任务并分发到集群节点上执行。这部分内容会涉及作业提交、调度...

Global site tag (gtag.js) - Google Analytics