Spark的资源申请与任务调度

                                        今天也要努力学习

  • 粗粒度资源申请和细粒度资源申请

粗粒度资源申请(Spark)

在**Application执行之前,将所有的资源申请完毕,当资源申请成功后,才会进行任务的调度,当所有的task执行完成后,才会释放这部分资源。**

优点:在Application执行之前,所有的资源都申请完毕,每一个task运行时直接使用资源就可以了,不需要task运行时在执行前自己去申请资源,task启动就快了,task执行快了,stage执行就快了,job就快了,application执行就快了。

缺点:直到最后一个task执行完成才会释放资源,集群的资源无法充分利用。当数据倾斜时更严重。

细粒度资源申请(MapReduce)

Application执行之前不需要先去申请资源,而是直接执行,让job中的每一个task在执行前自己去申请资源,task执行完成就释放资源。

优点:集群的资源可以充分利用。

缺点:task自己去申请资源,task启动变慢,Application的运行就相应的变慢了。

  1. 任务调度流程图

这里写图片描述

各个RDD之间存在着依赖关系,这些依赖关系就形成有向无环图DAG,DAGScheduler对这些依赖关系形成的DAG进行Stage划分,划分的规则很简单,从后往前回溯,遇到窄依赖加入本stage,遇见宽依赖进行Stage切分。完成了Stage的划分。DAGScheduler基于每个Stage生成TaskSet,并将TaskSet提交给TaskScheduler。TaskScheduler 负责具体的task调度,最后在Worker节点上启动task。

  1. DAGScheduler

    DAGScheduler对DAG有向无环图进行Stage划分。 记录哪个RDD或者 Stage 输出被物化(缓存),通常在一个复杂的shuffle之后,通常物化一下(cache、persist),方便之后的计算。 重新提交shuffle输出丢失的stage(stage内部计算出错),默认重试4次,四次之后意味application失败。job给TaskScheduler 将 Taskset 传给底层调度器 ​ – spark-cluster TaskScheduler ​ – yarn-cluster YarnClusterScheduler ​ – yarn-client YarnClientClusterScheduler

  2. TaskScheduler

    为每一个TaskSet构建一个TaskSetManager 实例管理这个TaskSet 的生命周期 数据本地性决定每个Task最佳位置 提交 taskset( 一组task) 到集群运行并监控,task执行失败的时候TaskScheduler进行重试,默认重试3次,三次之后以为这task所在的job失败。 推测执行:碰到计算缓慢任务需要放到别的节点上重试 重新提交Shuffle输出丢失的Stage给DAGScheduler,就是新开一个task重头处理同一个数据,谁先执行完就获取谁的执行结果。带来的问题:重复提交,慢的task提交的操作不能被返回,注意ETL操作下关闭推测执行,默认是关闭的;适用场景是出现节点负载压力过大。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值