Spark pool_spark docker

Spark pool_spark docker概述这篇文章主要是分析一下Pool这个任务调度的队列。整体代码量也不是很大,正好可以详细的分析一下,前面在TaskSchedulerImpl提到大体的功能,这个点在丰富一下吧。DAGSchedul

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

概述

这篇文章主要是分析一下Pool这个任务调度的队列。整体代码量也不是很大,正好可以详细的分析一下,前面在TaskSchedulerImpl提到大体的功能,这个点在丰富一下吧。

DAGScheduler负责构建具有依赖关系的任务集,TaskSetManger负责在具体的任务集内部调度任务,而TaskScheduler负责将资源提供给TaskSetManger供其作为调度任务的依据,但是每个sparkContext可能同时存在多个可运行的任务集,因此需要调度池pool来进行协调管理。

初始化源码解析

Spark pool_spark docker

poolname:名字

schedulingMode:调度模式,FAIR(公平调度),FIFO,默认是FIFO的方式。

initWeight:调度池权重

initMinShare:计算资源中的cpu核数

先看一下扩展类Schedulable,Scheduler是一个特征类,pool是其具体的实现.

Spark pool_spark docker

val schedulableQueue = new ConcurrentLinkedQueue[Schedulable]   调度队列
val schedulableNameToSchedulable = new ConcurrentHashMap[String, Schedulable] 调度对应关系
var weight = initWeight 调度池权重
var minShare = initMinShare 计算资源中的cpu核数
var runningTasks = 0   正在运行的task数量
var priority = 0    优先级
var stageId = -1  池的阶段id用于在调度中中断绑定
var name = poolName  调度池名字
var parent: Pool = null

Spark pool_spark docker

调度算法,根据调度模式初始化算法。org.apache.spark.scheduler.SchedulingAlgorithm。
调度池则用于调度每个sparkContext运行时并存的多个互相独立无依赖关系的任务集。
调度池负责管理下一级的调度池和TaskSetManager对象。
用户可以通过配置文件定义调度池和TaskSetManager对象。
  1.调度的模式Scheduling mode:用户可以设置FIFO或者FAIR调度方式。
  2.weight,调度的权重,在获取集群资源上权重高的可以获取多个资源。
  3.miniShare:代表计算资源中的cpu核数。
配置conf/faurscheduler.xml配置调度池的属性,同时要在sparkConf对象中配置属性。

方法解析

TaskSchedulerImpl在初始化过程中会根据用户设定的SchedulingMode(默认是FIFO)创建一个rootPool根调度池,之后根据具体的调度模式再进一步创建ScheduleBuilder对象,具体的ScheduleBuilder对象的BuildPools方法将在rootPool的基础上完成整个Pool的构建工作,之后就有通过addSchedulable将taskSetManger和pool关联起来了。

Schedulable有两个类,一个是pool,一个是TaskSetManager。

Spark pool_spark docker

Pool直接管理的是TaskSetManager,每个TaskSetManager创建时都存储了其对应的StageID.

Spark pool_spark docker

具体的调度算法,等以后的文章在做详细分析吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167904.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • centos 安装 python3_centos运行python脚本

    centos 安装 python3_centos运行python脚本注意:以下教程是让centOS7里面的Python2和Python3共存,并不是替换Python2。一、检查系统是否有gccgcc–version ——查询是否安装gcc-v——查询版本如果没有显示就执行下面yum安装gcc #查看gcc安装包yumsearchgcc#安装gccyum -yinstallgcc 安装下面依赖库(65个,…

    2022年9月16日
    0
  • 0元搭建卡盟主站_万能卡盟

    0元搭建卡盟主站_万能卡盟删除对象功能说明删除指定桶中的对象。方法定义1.ObsClient->deleteObject(array$parameter)1.ObsClient->deleteObject(array$parameter,callable$callback)请求参数删除桶功能说明删除桶,待删除的桶必须为空(不包含对象、历史版本对象或分段上传碎片)。方法定义1.Ob…

    2022年8月12日
    3
  • 新版大官场–男人是山

    新版大官场–男人是山一部官场小说,写的有点虚无缥缈,不够真实。[@more@]这本小说的写法有点发散,期间有些年份的跨度不够合理,中规中矩,闲时可看看。…

    2022年4月28日
    114
  • fastJson-对象转map

    fastJson-对象转mapCallbackEntitycallbackEntity=newCallbackEntity();callbackEntity.setUserId(infos.get(3));//用户idcallbackEntity.setOrderId(infos.get(0));//订单idcallbackEntity.setChannel(infos.get(4));//渠道callba…

    2022年5月13日
    196
  • 怎么写xsd文件

    怎么写xsd文件1.最简单的Schema文档如何写一个最简单的XML Schema文档呢?首先,我们写出一个最简单的XML文档。hello.xml——————-version=”1.0″?> Hello World!!hello.xsd----------version=”1.0″?> xmlns:xsd=”http://www.w3.org/2

    2022年10月28日
    0
  • 线程死锁的原因及解决方法_多线程队列

    线程死锁的原因及解决方法_多线程队列很久之前就听过互联架构中有三高,高可用、高并发、高性能,多线程是处理高并发问题的基石,起步阶段一定要对线程有一个系统深刻的印象,为以后做准备

    2022年10月15日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号