spark内核揭秘-04-spark任务调度系统个人理解
spark内核揭秘-04-spark任务调度系统个人理解
stark_summer 发表于3年前
spark内核揭秘-04-spark任务调度系统个人理解
  • 发表于 3年前
  • 阅读 2349
  • 收藏 47
  • 点赞 4
  • 评论 2

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: spark内核揭秘-04-spark任务调度系统个人理解 spark内核揭秘-04-spark任务调度系统个人理解 spark内核揭秘-04-spark任务调度系统个人理解

spark的任务调度系统如下所示:

从上图中可以看出来由RDD Objects产生DAG,然后进入了DAGScheduler阶段,DAGScheduler是面向state的高层次的调度器,DAGScheduler把DAG拆分成很多的tasks,每组的tasks都是一个state,每当遇到shuffle就会产生新的state,可以看出上图一共有三个state;DAGScheduler需要记录那些RDD被存入磁盘等物化动作,同时需寻找task的最优化调度,例如数据本地性等;DAGScheduler还要监视因为shuffle输出导致的失败,如果发生这种失败,可能就需要重新提交该state:


DAGScheduler划分state后以TaskSet为单位把任务,把任务交给底层次的可插拔的调度器TaskScheduler来处理:


可以看出TaskScheduler是一个trait,在目前spark系统中TaskScheduler的实现类只有一个TaskSchedulerImpl:


一个TaskScheduler只为一个SparkContext实例服务,TaskScheduler接受来自DAGScheduler发送过来的分组的任务,DAGScheduler给TaskScheduler发送任务的时候是以Stage为单位来提交的,TaskScheduler收到任务后负责把任务分发到集群中Worker的Executor中去运行,如果某个task运行失败,TaskScheduler要负责重试;另外如果TaskScheduler发现某个Task一直未运行完,就可能启动同样的任务运行同一个Task,那个任务先运行完就用哪个任务的结果。


TaskScheduler发送的任务交给了Worker上的Executor以多线程的方式运行,每一个线程负责一个任务:





其中的存储系统的管理是BlockManager来负责的:


看一下TaskSet的源码:


从TaskSet源码的第一个参数tasks就可以看出其是一个Task的数组,包含一组Task。

共有 人打赏支持
粉丝 60
博文 75
码字总数 51050
评论 (2)
寒风剑海
其实,TaskScheduler还有两个实现类,不过都是继承了TaskScheculerImpl类,分别是YarnClusterScheduler和YarnClientClusterScheduler,在yarn文件夹下
stark_summer

引用来自“寒风剑海”的评论

其实,TaskScheduler还有两个实现类,不过都是继承了TaskScheculerImpl类,分别是YarnClusterScheduler和YarnClientClusterScheduler,在yarn文件夹下
恩 确实,刚才重新了下代码,果真的,记住了,谢谢O(∩_∩)O
×
stark_summer
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: