Spark资源调度和任务调度

Posted yszd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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重新启动处理相同的逻辑,任务可能一直处于处理不完的状态。

以上是关于Spark资源调度和任务调度的主要内容,如果未能解决你的问题,请参考以下文章

Spark schedule资源调度分配详解

spark中资源调度任务调度

Spark资源调度

yarn三种调度器(资源调度策略或机制)

Yarn资源调度过程详细

Spark核心作业调度和任务调度之DAGScheduler源码