第36课:TaskScheduler内幕天机解密

2024-01-20 02:08

本文主要是介绍第36课:TaskScheduler内幕天机解密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内容:

TaskScheduler与SchedulerBackend
FIFO与FAIR两种调度模式
Task数据本地性资源分配

网上笔记详细笔记:
[Spark内核] 第36课:TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等
TaskScheduler内幕天机:Spark shell案例,TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解

一:通过spark-shell运行程序来观察TaskScheduler内幕
    1.当我们启动Spark-shell本身的时候命令终端反馈回来的主要是ClientEndpoint和SparkDeploySchedulerBackend,这是因为此时还没有任何job的触发,只是启动Application本身而已,所以主要是实例化SparkContext并注册当前的应用程序给Master且从集群中获得ExecutorBackend的资源(这就是为什么启动日志没有DriverEndpoint信息的原因,因为此时应用程序内部还没有发生具体计算资源的调度);
    2.DAGScheduler划分好Stage后会通过TaskSchedulerImpl中的TaskSetManager来管理当前要运行的Stage的所有任务TaskSet,TaskSetManager会根据locality aware来为Task分配计算资源,监控Task的执行状态(例如重试、慢任务进行推测式执行等);
二:TaskScheduler和SchedulerBackend
    1.总体的底层任务的调度的过程如下:
       a)TaskSchedulerImp.submitTasks--主要的作用是将TaskSet加入到TaskSetManager
   b)SchedulableBuilder.addTaskSetManager--SchedulableBuilder会确定TasksetManager的调度顺序,然后按照TasksetManager的locality aware来确定每一个Tasks具体运行在哪个ExecutorBackend中;
     c)CoarseGrainedSchedulerBackend.reviewOffers:给DriverEndPoint发送ReviewOffers,ReviewOffers本身是一个空的case object对象,只是起到底层资源调度的作用,有Task提交或者计算资源变动的时候会发送ReviewOffers这个消息作为触发器
     d)在driverEndpoint接受ReviewOffers消息并路由到makeOffers具体的方法中;在makeOffers方法中首先准备好所有可以用于计算的workerOffers(代表了所有可用ExcutorBackend中可用的Cores等信息)

    e)TaskSchedulerImpl.ResourceOffers:为每一个Task具体分配资源,输入是ExecutorBackend及其可用的Cores,输出TaskDescription的二维数组,在其中确定了每一个Task具体运行在哪一个ExecutorBackend;ResourceOffers到底是如何Task具体运行在哪个ExecutorBackend的?算法的实现如下:
         i.通过Random.shuffer方法重新洗牌所有的计算资源以寻求计算资源的均衡;
         ii.根据每个ExecutorBackend的Cores的个数声明类型为TaskDescription的ArrayBuffer数组;
         iii.如果有新的ExecutorBackend分配给job,此时会调用ExecutorAdded来获得最新的完整的可用的计算资源
         iv.通过下面的代码追求最高级别的优先级本地性
         v.通过调用TasksetManager的ResourceOffer最终确定每个task具体运行在哪个ExecutorBackend的具体的locality level:
     f)通过launchTasks把任务把ExecutorBackend去执行;

补充:
    1.Task默认的最大重试次数是4次

    def this(sc: SparkContext) = this(sc, sc.conf.get(config.MAX_TASK_FAILURES))private[spark] val MAX_TASK_FAILURES =ConfigBuilder("spark.task.maxFailures").intConf.createWithDefault(4)

  2.Spark应用程序目前支持两种调度模式:FIFO、FAIR,可以通过spark-env.sh中的spark.scheduler.mode进行设置具体,默认情况下是FIFO的方式:

     // default scheduler is FIFOprivate val schedulingModeConf = conf.get("spark.scheduler.mode", "FIFO")

   3.TaskScheduler中要负责为Taask分配计算资源,此时程序已经具备集群中的就算资源了,根据计算本地性原则确定Task具体要运行在哪一个ExecutorBackend中;
    4.TaskDescription中已经确定好了Task具体要运行在
    而确定Task具体运行在哪一个ExecutorBackend上的算法是由
    5.数据本地性优先级从高到底一=依次为:PROCESS_LOCAL,NODE_LOCAL,NO_PREF,RACK_LOCAL,ANY
    NO_PREF是指机器本地性
    6.每个Task默认是采用一个线程进行计算的:

      // CPUs to request per taskval CPUS_PER_TASK = conf.getInt("spark.task.cpus", 1)

  7.DAGScheduler是从数据层面考虑prefereLocaltion的,而TaskScheduler是从具体计算的Task角度考虑计算本地性;

    /** Returns the configured max frame size for Akka messages in bytes. */def maxFrameSizeBytes(conf: SparkConf): Int = {val frameSizeInMB = conf.getInt("spark.akka.frameSize", 128)

    8.Task进行广播时候的AkkFrameSize大小是128MB,如果任务大于等于128MB-200k的话,则Task会直接被丢弃掉,如果小于128MB-200k的话,会通过CoarseGrainedSchedulerBackend去launchTask到具体的ExecutorBackend;


 

这篇关于第36课:TaskScheduler内幕天机解密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/624480

相关文章

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在

MySQL技术内幕_innodb存储引擎

MySQL技术内幕_innodb存储引擎 INNODB innodb中如果表没有主键 表是否由 非空唯一键,有则该字段为主键没有,则自动创建一个6字节大小的指针 innodb存储引擎的所有数据都存储在表空间中,表空间由段,区,页(块)组成。 如果启用了 innodb_file_per_table, 则每张表内的数据可以单独放在一个表空间中即使启用了上面参数,共享表空间也会因为 系统事务信息

【C#生态园】解密C# Web框架:选对框架,事半功倍

探秘C# Web开发利器:六款高性能框架与库详细解读 前言 在当今的软件开发领域,C#作为一种多用途编程语言,被广泛应用于各种类型的应用程序开发。特别是在Web开发领域,有许多优秀的C# Web框架和库,本文将对其中一些备受关注的框架进行介绍和比较,帮助读者更好地选择适合其项目需求的工具。 欢迎订阅专栏:C#生态园 文章目录 探秘C# Web开发利器:六款高性能框架与库详细解

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

关于大模型和AIGC的36条笔记和真话

行业到底有多卷? 最新统计,中国已有130多个大模型问世,在网信办备案的算法模型也超过70多家。BAT等互联网巨头悉数下场发布AI大模型,仅2023年就有超60家创业公司拿到融资,产品更是布满了基础层、模型层和应用层。新一代生成式AI,可能要回头看看上一代AI趟过的坑,不要行业自嗨,避免上一个冬天的轮回。在这个领域的从业者,更要清晰地看到行业的内卷和客户的痛点,别被大佬的鸡汤迷了眼。 1、

itoa()函数,10进制转换到(2~36)进制

先看下itoa()的函数说明吧: 功 能:把一整数转换为字符串   用 法:char *itoa(int value, char *string, int radix);    详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写.    参数:  value: 待转化的整数。            radix:

详解BitLocker模式及加密数据和解密方法及无法访问解决之道

BitLocker主要有两种工作模式:TPM模式和U盘模式,同时为了实现更高程度的安全,我们还可以同时启用这两种模式。 BitLocker 自动设备加密在全新安装体验 (OOBE) 期间启动。 但是,只有在用户使用 Microsoft 帐户或 Azure Active Directory 帐户登录后,才会启用(提供)保护。 在此之前,保护已暂停,数据不受保护。 使用本地帐户不会启用 BitLoc

RC4加密解密算法123

RC4是一种对称密码算法,它属于对称密码算法中的序列密码(streamcipher,也称为流密码),它是可变密钥长度,面向字节操作的流密码。 RC4是流密码streamcipher中的一种,为序列密码。RC4加密算法是Ron Rivest在1987年设计出的密钥长度可变的加密算法簇。起初该算法是商业机密,直到1994年,它才公诸于众。由于RC4具有算法简单,运算速度快,软硬件实现都