文档章节

Spark1.3.0源码分析 第三篇 Master资源调度算法原理

daerFriend
 daerFriend
发布于 2017/06/16 13:16
字数 973
阅读 52
收藏 0

在上一篇说到Master注册机制,当我们在进行注册完以后都会去调用一个方法:schedule()

这个方法中封装Mester资源调度算发的基本原理。如图:

在这个方法中首先,会判断Master是否是ALIVE,如果不是直接返回,也就是说standby Master不对Application进行资源调度。接着就会对传入的元素的集合进行随机的打乱,取出workers中以前注册的worker,并且必须是ALIVE的worker,对状态为ALIVE的worker,进行随机的打乱。如图

接下来,就是进行资源的调度,其首先,对Driver的调度,即Driver调度机制

首先,是遍历waitingDriver Arraybuffer

在for循环中,又会通过while循环来遍历活着的worker,只要还有活着的worker就一直循环下去并且还要求当前Drive还是没有启动的,在while循环中有回去判断当前worker空闲cpu core 是否大于Diver的需求,当前worker空闲的内存空间是否大于Driver的需求。如果满足,则会通过launchDriver()方法去启动Driver。并将Driver从waitingDrvier中缓存队列中移除,将指针移向下一个worker,如图:

1)进入launchDriver()中进行分析

    在launchDriver()方法中,会将Driver加入到worker内存中,将Driver的内存和cup加入到worker内存和cup中,然后用worker的Actor,将launcDriver的消息发送到worker,让worker去启动Dirver,最后将worker的状态设为running。如图:

回到schedule()中,接下来就是Application资源调度机制 ,Application分为两种:SpreadOutApps与非SpreadOutApps。

1)spreadOutApps方式

在这种调度机制中,首先,遍历出waittingApps中的ApplicationInfo,并且过滤出还需要core的Application,然后,在for循环中从workers中状态为ALIVE的,再次过滤还可以被Application使用的worker,并对剩余的cpu数量进行倒叙排序。接着它会创建一个数组来存储要分配给worker的cpu 的数量,接着会获取总共需要分配的cpu core 的数量,即去Application 还需要的cup core的数量与worker总共还可以分配的cup core 的数量,来防止由于worker 空闲的CPU core  不够而超额分配的如图:

 

以上准备工作做完以后,接着就是开始分配资源了,在源码中,是通过while循环遍历来进行分配,条件就是toAssign>0,就是说只要还有没有分配完的cpu core 一直分配下去,接着进入到whlie里面中就可以知道,在while循环中,先是判断每个worker空闲的cup 数是否大于要分配的cup数量,如果大于,则将总共要分配的cpu -1,因为已经决定要调用这个worker了,并将给这个worker 分配的cpu 数量 +1,否则将指针移发下一个worker,如图:

在给worker 分配完每个Application需求cup 之后,遍历worker,在worker上启动Executor,并创建executorDesc对象,其中封装了给这个Executor分配了多少cup core,如图:

2) 非sprendOutApps方式

     这个算法刚好和sprendOutApps相反,它要求是尽量少的分配worker,比如总共有十个worker,每个有十个cup core ,app总共要分配二十个cup core,那么其实只会分配到两个worker上,每个worker占满十个cup core。首先,遍历worker,要求worker的状态是ALIVE,并且还有空闲 cpu core的worker,再遍历Application,并且是还需要的cup core的app,判断当前worker是否还可以被app使用,然后获取worker剩余的 cpu core和获取app还需要的cup core最小值,给app添加一个Executor,调用launchExecutor()方法,在worker启动一个Executor,将worker的状态修改为RUNNING,如图:

© 著作权归作者所有

daerFriend
粉丝 1
博文 6
码字总数 25694
作品 0
程序员
私信 提问
SPARK 源码分析技术分享(带bilibili视频)

SPARK 源码分析技术分享 (带bilibili视频) 【本站点正在持续更新中…2018-12-05…】 SPARK 1.6.0-cdh5.15.0 Hadoop 2.6.0-cdh5.15.0 spark-scala-maven 微信(技术交流) : thinktothings SPA...

thinktothings
2018/12/02
0
0
系统的学习大数据分布式计算spark技术

我们在学习一门技术的时候一定要以系统的思维去学习,这样的话,不仅对你的提高有很大的帮助,也可以让你高效的使用这个技术。 对于学习spark,当然也是要以系统的思维去全面的学习。这篇博客...

tangweiqun
2017/09/24
0
0
SPARK的MAster资源调度原理(源码)分析

SPARK的MAster资源分配算法(SPARK1.3) master资调度通过源码中的 org.apache.spark.deploy.master包下的schedule()方法实现 步骤如下: 首先判断master是否是alive状态,如果不是alive则返...

恶魔苏醒ing
2017/05/03
0
0
大数据学习之路(持续更新中...)

在16年8月份至今,一直在努力学习大数据大数据相关的技术,很想了解众多老司机的学习历程。因为大数据涉及的技术很广需要了解的东西也很多,会让很多新手望而却步。所以,我就在自己学习的过...

青夜之衫
2017/12/05
0
0
Spark:Yarn-cluster和Yarn-client区别与联系

我们都知道Spark支持在yarn上运行,但是Spark on yarn有分为两种模式yarn-cluster和yarn-client,它们究竟有什么区别与联系?阅读完本文,你将了解。   Spark支持可插拔的集群管理模式(St...

张欢19933
2016/02/22
86
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 ——不知道假装开心,装的像么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :天黑了 你很忧愁, 你说世界上, 找不到四块五的妞, 行走在凌晨两点的马路上, 你疲倦地拿着半盒黄鹤楼。#今日歌曲推荐# 《四块...

小小编辑
今天
2.3K
18
64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
69
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
34
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
143
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部