Spark的笔记03

一.Spark的资源调度和任务调度

资源调度

  • 1.集群启动,Worker向Master汇报资源,Master掌握集群的资源信息
  • 2…客户端提交Spark任务,创建两个对象 DAGScheduler 和TaskScheduler ,TaskScheduler 向Master申请资源
  • 3.Master找到到满足资源的Worker,启动Executor
  • 4.Executor启动之后,反向注册给Driver端,Driver掌握了一批计算资源

任务调度

  • 5.遇到一个Action算子时,当前application中就有一个job,job中RDD依赖关系形成DAG有向无环图
  • 6.DAGScheduler将DAG按照RDD宽窄依赖关系,切割job,划分stage,将Stage以TaskSet的形式提交给TaskScheduler
  • 7.TaskScheduler遍历TaskSet,获取一个个的Task,将Task发送到Executor中的线程池中执行
  • 8.TaskSchedulerj监控task执行,回收结果

问题

  • 1.TaskScheduler可以重试执行失败的task,默认重试3次,如果3次之后,依然失败,由DAGScheduler负责重试task 所在的Stage,重试4次之后,如果没有执行成功,stage所在的job就执行失败,job失败,application就失败了

    2.TaskScheduler可以重试执行缓慢的task,这就是Spark中的推测执行机制,默认是关闭的,对于ETL的数据,不要开启

二.粗粒度资源申请和细粒度资源申请

粗粒度资源申请(Spark)

  • Application执行之前,先将所有的资源申请完毕,如果没有资源就等待资源。如果资源够,申请完毕之后才会执行application,application中的每个job就不需要单独自己申请资源,job执行快,application执行快。当最后一个job执行完成之后,这批资源才会被释放

    优点:job执行快,application执行快

    缺点:集群资源不能充分利用

细粒度资源申请(MR)

  • Application执行之前,每个job自己申请资源,自己释放资源,这样,每个job执行就慢,整体application执行就慢
  • 优点:集群资源可以充分利用
  • 缺点:application执行慢

三.transformation & Action 算子
transformation:
​ mapPartitionWithIndex,repartition,coalesce,groupByKey,zip,zipWithIndex
Action:
​ countByKey,countByValue,reduce

object Day03 {
  def main(args: Array[String]): Unit = {

    val conf  = new SparkConf()
    conf.setMaster("local")
    conf.setAppName("test&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值