• spark内核揭秘-06-TaskSceduler启动源码解析初体验


    TaskScheduler实例对象启动源代码如下所示:


    从上面代码可以看出来,taskScheduler的启动是在SparkContext


    找到TaskSchedulerImpl实现类中的start方法实现:

    1、从上代码看到,先启动CoarseGrainedSchedulerBackend,


    从上面CoarseGrainedSchedulerBackend类的代码,可以看出spark启动了DriverActor,名称为CoarseGrainedScheduler,这是一个akka消息通信类,会先运行preStart()方法


    从上面代码可以看到,初始化了akka客户端监听,还有最重要的是调用了系统的scheduler调度,参数函数是立即执行调度,间隔1000毫秒,运行ReviveOffers方法


    进入makeOffers()方法:


    运行launchTask方法:




    这段代码是spark序列号任务大小超过akkaFrameSize - AkkaUtils.reservedSizeBytes大小,那就报错为”Serialized task %s:%d was %d bytes, which exceeds max allowed: " +
                    "spark.akka.frameSize (%d bytes) - reserved (%d bytes). Consider increasing " +
                    "spark.akka.frameSize or using broadcast variables for large values.
    “ ,此刻会将该任务终止,并将任务从任务列表中移除,这样推荐使用broadcast广播方式

    否则,将获取执行任务数据,并减少空闲cpu数,发送消息执行 LaunchTask(new SerializableBuffer(serializedTask))方法,即CoarsedGrainedExecutorBackend类的LaunchTask方法:


    上面代码 会运行executor 的launchTask方法:


    TaskRunner就是一个多线程:




    代码太多,我就不截图了,其实实际就是根据机器状况,运行task任务

    2、然后我们回到TaskSchedulerImpl实现类中的start方法


    如果isLocal=false and spark.speculation=true,不是local模式,那就要dispatcher分发任务了,默认是100毫秒后立即启动,并间隔100毫秒循环运行,


    CoarseGrainedSchedulerBackend的reviveOffers:



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    YGC问题排查,又让我涨姿势了!
    AI时代,还不了解大数据?
    实战篇:一个核心系统 3 万行代码的重构之旅
    监控系统选型,这篇不可不读!
    实时离线一体大数据在资产租赁saas服务中使用
    基于监控服务打造微服务治理生态体系
    CDH6.3.2升级Hive到4.0.0
    强化学习 9 —— DQN 改进算法DDQN、Dueling DQN tensorflow 2.0 实现
    强化学习 8 —— DQN 算法 Tensorflow 2.0 实现
    强化学习 7——Deep Q-Learning(DQN)公式推导
  • 原文地址:https://www.cnblogs.com/stark-summer/p/4829816.html
Copyright © 2020-2023  润新知