zoukankan      html  css  js  c++  java
  • Spark TaskScheduler 概述

    TaskScheduler 原理:

        1. DAGScheduler 在提交Taskset给底层调度器的时候是面向接口TaskScheduler的, 这符合面向对象中依赖抽象原则,带来底层资源调度器的可插拔性, 导致Spark可以运行在众多的资源高度器模式上。例如: Standalone, Yarn, Mesos, local. EC2 及其它自定义的资源调度器

        2. 在SparkContext实例化的时候通过createTaskScheduler来创建 TaskSchedulerImpl和StandaloneSchedulerBackend。在TaskSchedulerImpl的initialize方法中把StandaloneSchedulerBackend 传进来从而赋值给TaskSchedulerImpl的backend;在TaskSchedulerImple调用start方法的时候会调用 backend.start方法。

        3. TaskScheduler的核心任务是提交TaskSet到集群运算并汇报结果

            a)    为TaskSet 创建和维护一个 TaskSetManager 并追踪任务的本地性以及错误信息;

            b)   遇到 Straggle 任务会放到其它的节点进行重试

            c)    向 DAGScheduler 汇报执行情况,包括在 Shuffle 输出 lost 的时候报告 fetch failed错误等信息

        4. TaskScheduler 内部会握有 SchedulerBackend,从 Standalone 的模式来讲,具体实现是 StandaloneSchedulerBackend。

        5. StandaloneSchedulerBackend 在启动的时候创建 StandaloneAppClient 实例并在该实例Start的时候启动了 ClientEndpoint 这个消息循环体,ClientEndpoint 在启动的时候会向Master注册当前程序。而 StandaloneSchedulerBackend 的父类 CoarseGrainedSchedulerBackend 在 start 的时候会实例化类型为 DriverEndpoint 的消息循环体。StandaloneSchedulerBackend 专门负责收集 Worker 上的资源信息。当 ExecutorBackend 启动的时候会发送 RegisteredExecutor 信息向 DriverEndpoint 注册。此时StandaloneSchedulerBackend 就掌握了当前应用程序拥有的计算资源,就是通过 StandaloneSchedulerBackend 拥有的计算资源来具体运行 Task。

        6. SparkContext、DAGScheduler、TaskSchedulerImpl、StandaloneSchedulerBackend 在应用程序启动的时候只实例化一次,应用程序存在期间始终存在这些对象。

  • 相关阅读:
    第十一篇 中间件
    第十篇 Form表单
    第九篇 AJAX
    第八篇Django分页
    第七篇 Django-认证系统
    第五篇Django URL name 详解
    第四篇Django之模板语言
    java_tomcat_Server at localhost was unable to start within 45 seconds 小喵咪死活启动报错-二
    java_tomcat_the_APR based Apache Tomcat 小喵咪死活启动报错_临时方案
    linux_设置开机自启动程序脚本
  • 原文地址:https://www.cnblogs.com/langfanyun/p/8098804.html
Copyright © 2011-2022 走看看