zoukankan      html  css  js  c++  java
  • Task级别任务调度分析---源码级

    1.Driver和SparkContext

    先有的driver,在driver中创建的sparkcontext。

    运行应用程序的main函数,启动一个Driver进程。功能如下:

    • 创建spark的sparkcontext上下文
    • 划分RDD并生成有向无环图(DAG)
    • 与spark中的其他组件进行协调,协调资源等等(SchedulerBackend)
    • 生成并发送task到executor(taskScheduler)

    Driver负责和ClusterManager通信,进行资源的申请、任务的分配和监控等。

    Driver(驱动程序):Spark中的Driver即运行上述Application的main()函数并且创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责与ClusterManager集群管理器进行通信,进行资源的申请,任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭。

    2.Task级别的调度

    spark是粗粒度资源申请,application启动之前首先将所有的资源申请完毕,如果申请不到一直处于等待状态,一直到资源申请到为止。必须一次申请完毕之后,才会执行任务,这样,task执行的时候,task不需要自己申请资源,加快了task的执行效率,task快了,job就快了,job快,application执行就快了。必须最后一个task执行完毕之后,才会释放所有资源。

    • 调用TaskScheduler.submitTask(taskSet, ...)方法,TaskScheduler本身是个接口,spark里只实现了一个TaskSchedulerImpl。调用TaskSchedulerImpl.submitTask(taskSet, ...)接收DAGScheduler提交来的tasks ,分析stage里Task的类型,生成一个Task描述,即TaskSet。
    • 调用TaskSchedulerImpl.TaskSetManager(taskSet, ...)为tasks创建一个TaskSetManager,添加到任务队列里。TaskSetManager跟踪每个task的执行状况,维护了task的许多具体信息。
    • SchedulerBackend在TaskScheduler下层,用于对接不同的资源管理系统,SchedulerBackend是个接口,实现类是CoarseGrainedSchedulerBackend。通过SchedulerBackend.reviveOffers给driverEndpoint发送ReviveOffer消息。reviveOffers()方法的实现。就是别人直接向SchedulerBackend请求资源, 直接调用了makeOffers()方法,SchedulerBackend把node节点上可用资源交给TaskScheduler,TaskScheduler根据调度策略为排队的任务分配合理的cpu和内存资源,返回一批可执行的任务描述。
    • SchedulerBackend.launchTask,把任务序列化,将序列化的任务发送给executor。
    • executor.receive()把任务进行反序列化,利用创建好的executor对象执行任务。
    • executor.launchTask()把task塞到了executor线程池上,executor里的线程池会执行task的run()
      源码分析如下:

      spark任务调度流程图如下:

      TaskSetManager结构如下:
  • 相关阅读:
    x240 uefi ubuntu 12.04.4
    配置管理系统和总体变更系统有什么差别与联系
    C#-利用ZPL语言完毕条形码的生成和打印
    Java Web系统经常使用的第三方接口
    C++类型转换
    JAVA实现HTTPserver端
    Java 实现迭代器(Iterator)模式
    tomcat源代码Catalina
    【剑指offer】二叉搜索树转双向链表
    linux下C语言中的flock函数使用方法 .
  • 原文地址:https://www.cnblogs.com/wanpi/p/14616748.html
Copyright © 2011-2022 走看看