Spark系列课程-00xxSpark任务调度

下面我们一起来看一下Spark的任务调度

Spark任务调度.png

首先最左边的叫做RDD Object就是一个一个的RDD对象
一个一个的RDD对象,可以组成一个有向无环图
一个有向无环图,我们也可以把他叫做一个Application应用程序
有向无环图用代码来表示,他就是一个应用程序

image.png

疑问,生成有向无环图的这个东西叫什么名字?

然后他把DAG传给了一个叫做DAGScheduler的一个东西
DAGScheduler是一个对象,他是任务调度的一个高层调度器

DAGScheduler这个对象他有什么作用?
我们看下边

image.png

DAGScheduler干的第一件事就是把DAG给切割了,
那他把DAG切割成什么了?切割成一个个Stage了
他那切割Stage依据的是什么?依据RDD之间的宽窄依赖

然后他又以StaskSet的形式提交给TaskScheduler

image.png

TaskScheduler我们叫做是——Spark任务调度的底层调度器

TaskSet和Stage有什么区别呢?
没有区别,
Stage我们说他是有一组可以并行计算的task
TaskSet看他的名字就知道他是一些Task的集合,
只不过封装的对象不一样而已。

刚刚我们都说的是提交,但实际上,是调用了TaskScheduler的一个方法,把TaskSet当做参数传递进来了。

然后TaskScheduler会遍历TaskSet这个集合
拿到每一个Task之后,他会把这些Task发送到每一个计算节点当中去。
计算节点我们叫什么?叫做Executor
TaskScheduler会遍历TaskSet里面的每一个Task,然后把Task提交到Executor中的线程池中去。
Executor中执行的Task的执行状态,会向TaskScheduler来反馈
Task是有可能会失败的,在线程池中执行,是有可能会失败的对吧?

如果Task运行失败,TaskScheduler是负责失败重试,TaskScheduler会把失败的任务,重新发送给Executor默认重试发送3次,
如果3次依然失败,那么这个Task所在的Stage就失败了
如果Stage失败了怎么办?
由DAGScheduler负责重新发送Stage,重试次数是4次,如果重试提交Stage4次依然还是失败的话
整个Job就失败了,如果job失败了,他整个Application就失败了。

TaskScheduler除了能重新发送失败的task
还能处理落后的task,如果TaskScheduler发现落后的Task

我们总结一下TaskScheduler

  1. launch Task
  2. retry failed
    3.Straggling Task
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容