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 在应用程序启动的时候只实例化一次,应用程序存在期间始终存在这些对象。

Spark TaskScheduler 概述的更多相关文章

  1. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器

    第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...

  2. 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析 + Spark Streaming 概述、运行、解析 + DStream 的输入、转换、输出 + 优化

    第1章 Spark Streaming 概述1.1 什么是 Spark Streaming1.2 为什么要学习 Spark Streaming1.3 Spark 与 Storm 的对比第2章 运行 S ...

  3. 大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank 实例

    第1章 Spark GraphX 概述1.1 什么是 Spark GraphX1.2 弹性分布式属性图1.3 运行图计算程序第2章 Spark GraphX 解析2.1 存储模式2.1.1 图存储模式 ...

  4. Spark SQL概念学习系列之Spark SQL概述

    很多人一个误区,Spark SQL重点不是在SQL啊,而是在结构化数据处理! Spark SQL结构化数据处理 概要: 01 Spark SQL概述 02 Spark SQL基本原理 03 Spark ...

  5. 第1章 Spark SQL概述

    第1章 Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作 ...

  6. Spark内核概述

    提交Spark程序的机器一般一定和Spark集群在同样的网络环境中(Driver频繁和Executors通信),且其配置和普通的Worker一致 1. Driver: 具有main方法的,初始化 Sp ...

  7. Spark环境搭建(五)-----------Spark生态圈概述与Hadoop对比

    Spark:快速的通用的分布式计算框架 概述和特点: 1) Speed,(开发和执行)速度快.基于内存的计算:DAG(有向无环图)的计算引擎:基于线程模型: 2)Easy of use,易用 . 多语 ...

  8. Spark Context 概述

    1. Spark 程序在运行的时候分为 Driver 和 Executor 两部分: 2. Spark 的程序编写是基于 SparkContext 的,具体来说包含两方面: a)    Spark 编 ...

  9. Spark原理概述

    原文来自我的个人网站:http://www.itrensheng.com/archives/Spark_basic_knowledge 一. Spark出现的背景 在Spark出现之前,大数据计算引擎 ...

随机推荐

  1. 机器学习(十七)— SVD奇异值分解

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...

  2. cpu满问题分析

    功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 做为开发人员,肯定会遇到这类问题,介绍一下分析CPU 1 ...

  3. MFC工程名称与所包含文件名称的关系(工程名可以更改,输出的.dll.exe.lib都以最后工程名命名为准)

    创建MFC应用程序时,可以规定MFC程序的工程名称,假设初始为MFCApp,则此后该应用程序的资源文件名称,继承自CWinApp的那个类,包括.def文件,.odl文件等都会以MFCApp打头. 但是 ...

  4. php断点续传

    http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html

  5. BZOJ4317: Atm的树+2051+2117

    BZOJ4317: Atm的树+2051+2117 https://lydsy.com/JudgeOnline/problem.php?id=4317 分析: 二分答案之后就变成震波那道题了. 冷静一 ...

  6. React 版 V2EX 社区( react & react-router & axios & antd ui)

    目录 项目简介 在线演示 截图演示 踩坑 项目简介(1/4) Github: https://github.com/bergwhite/v2ex-react 项目使用React.Reac-router ...

  7. MySQL5.7出现Your password has expired. To log in you must change it using a client that supports expir

    今天晚上本来想写bootstrap-fileinput插件集成fastdfs的文章,但是刚启动idea里面的QiYuAdmin就出现了错误: Your password has expired. To ...

  8. 关系运算符 逻辑运算符 if 语句 switch语句

    1. BOOL类型 BOOL isRightOrNo = YES; isRightOrNo = 56;//可以打印出来,在C语言中,非0即真 printf("%d\n" , isR ...

  9. select元素选择时间以及jQuery对select的属性操作

    <select class="input04" id="1" name="in_class1" onchange="setc ...

  10. C#调试信息打印到输出窗口

    System.Diagnostics.Debug.WriteLine("aaaa");