原创,转载请注明出处。
开始研究神奇的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/
另:此博客开始,我会在每篇文章中尽量把所有的引用都明确付贴进去,以表示对他人的尊敬。
分享到:
相关推荐
Arduino-TaskScheduler.zip,Arduino、ESPX和STM32微控制器任务调度器的协同多任务处理,Arduino是一家开源软硬件公司和制造商社区。Arduino始于21世纪初,深受电子制造商的欢迎,Arduino通过开源系统提供了很多灵活性...
C#利用Interop.TaskScheduler.dll添加删除计划任务,可实现程序随Windows系统自动启动; 项目用VS2017打开,需要.net 2.0支持,需要管理员权限;支持win7 win10;不支持xp。
使用编程方式添加计划任务的.net组件taskscheduler
Basic class for using the Microsoft Task Scheduler(33KB)
TaskSchedulerTaskScheduler,它决定了task该如何被调度,而在.net framework中有两种系统定义Scheduler,第一个是Task默认的ThreadPoolTaskScheduler,还是一种SynchronizationContextTaskScheduler,以及这两种...
Calamus.TaskScheduler 基于Asp.Net Core 5.0采用Quartz.Net编写的开源任务调度Web管理平台 部署步骤 1,创建持久化数据库(以MySQL为例) -创建数据库石英,Charset为utf8mb4 -根据数据库/表/表_mysql_innodb.sql...
Task scheduler based on algorithms with absolute priorities
里面有两个文件夹,TaskScheduler1.0对应的是windows xp/2000/2003系统中的任务计划,TaskScheduler2.0对应的是所有的windows系统中的任务计划。每个文件夹中都有C#源码、库文档说明和dll文件。方便C#开发windows...
在 Spark 调度中最重要的是 DAGScheduler 和 TaskScheduler 两个调度器,其中,DAGScheduler 负责任务的逻辑调度, 将作业拆分为不同阶段的具有依赖关系的任务集。TaskScheduler 则负责具体任务的调度执行...
任务计划程序使用Spring Boot的TaskScheduler
GPU Task Scheduler GPU Task Scheduler是一个Python库,用于并行调度GPU作业。 在设计和运行基于神经网络的算法时,我们经常需要在大量参数组合上测试代码。 为了提高效率,我们可能还希望将任务并行分布在多个...
一个简洁、实用、方便的Android异步处理库,已应用到百万日活的线上项目中
.archMicrosoft.Win32.TaskScheduler.dll
2,精通RDD、DAGScheduler、TaskScheduler和Worker节点内部的工作的每一步的细节; 3,精通Job的逻辑执行和物理执行; 4,精通Shuffle、Cache、Checkpoint和Broadcast 掌握此阶段即可跻身于Spark内核高手之列!
Windows Task Scheduler的原始.NET包装器聚集了多个版本并提供了用于编辑的本地化控件。 快速链接 示例代码,库使用方法,故障排除等。 -类/方法/属性文档和示例 -使用搜索框查看您的问题是否已经回答。 -帮助...
许可许可的C和C ++ Task Scheduler,用于创建并行程序。 需要C ++ 11支持。 通过Github赞助商或Patreon enkiTS支持enkiTS的开发。Master分支Dev分支enki Task Scheduler任务许可程序,是一种许可的C和C ++ Task ...
Basic class for using the Microsoft Task Scheduler (26KB)
NULL 博文链接:https://coolsunchen.iteye.com/blog/2002207
TaskScheduler_适用于Arduino+ESPx+STM32+nRF+其他微控制器的协作多任务处理器_优质嵌入式项目分享.zip