spark 笔记 11: SchedulingAlgorithm 两种调度算法的优先级比较
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了spark 笔记 11: SchedulingAlgorithm 两种调度算法的优先级比较,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2422字,纯文字阅读大概需要4分钟。
内容图文
![spark 笔记 11: SchedulingAlgorithm 两种调度算法的优先级比较](/upload/InfoBanner/zyjiaocheng/1081/307856a476584cd99d76db569e8977d6.jpg)
-
--计算优先级的差。注意,在程序中,大部分时候是优先级的数字越小,它优先级越高
-
--如果优先级相同,那么stage编号越靠前,优先级越高
-
--如果优先级字段和stage id都相同,那么s2比s1更优先。(有这种情况?)
- --没有达到最小资源的task比已经达到最小资源的task优先级高
- --如果两个task都没达到最小资源,那么比较它们占用最小资源的比例。比例越小越优先
- --否则比较占用权重资源的比例,比例越小越优先
- --如果所有上述的比较都相同,那么名字小的优先(哈哈,名字很重要);
- --名字相同,则s2优先级高。
/**
* An interface for sort algorithm
* FIFO: FIFO algorithm between TaskSetManagers
* FS: FS algorithm between Pools, and FIFO or FS within Pools
*/
private[spark] trait SchedulingAlgorithm {
def comparator(s1: Schedulable, s2: Schedulable): Boolean
}
private[spark] class FIFOSchedulingAlgorithm extends SchedulingAlgorithm {
override def comparator(s1: Schedulable, s2: Schedulable): Boolean = {
val priority1 = s1.priority
val priority2 = s2.priority
var res = math.signum(priority1 - priority2) --计算优先级的差。注意,在程序中,大部分时候是优先级的数字越小,它优先级越高
if (res == 0) {
val stageId1 = s1.stageId
val stageId2 = s2.stageId
res = math.signum(stageId1 - stageId2) --如果优先级相同,那么stage编号越靠前,优先级越高。
}
if (res < 0) {
true
} else {
false ---如果优先级字段和stage id都相同,那么s2比s1更优先。(有这种情况?)
}
}
}
private[spark] class FairSchedulingAlgorithm extends SchedulingAlgorithm {
override def comparator(s1: Schedulable, s2: Schedulable): Boolean = {
val minShare1 = s1.minShare
val minShare2 = s2.minShare
val runningTasks1 = s1.runningTasks
val runningTasks2 = s2.runningTasks
val s1Needy = runningTasks1 < minShare1
val s2Needy = runningTasks2 < minShare2
val minShareRatio1 = runningTasks1.toDouble / math.max(minShare1, 1.0).toDouble
val minShareRatio2 = runningTasks2.toDouble / math.max(minShare2, 1.0).toDouble
val taskToWeightRatio1 = runningTasks1.toDouble / s1.weight.toDouble
val taskToWeightRatio2 = runningTasks2.toDouble / s2.weight.toDouble
var compare:Int = 0
if (s1Needy && !s2Needy) { ----没有达到最小资源的task比已经达到最小资源的task优先级高
return true
} else if (!s1Needy && s2Needy) { ----没有达到最小资源的task比已经达到最小资源的task优先级高
return false
} else if (s1Needy && s2Needy) { ---如果两个task都没达到最小资源,那么比较它们占用最小资源的比例。比例越小越优先
compare = minShareRatio1.compareTo(minShareRatio2)
} else { ---否则比较占用权重资源的比例,比例越小越优先
compare = taskToWeightRatio1.compareTo(taskToWeightRatio2)
}
if (compare < 0) {
true
} else if (compare > 0) {
false
} else {----如果所有上述的比较都相同,那么名字小的优先(哈哈,名字很重要);名字相同,则s2优先级高。
s1.name < s2.name
}
}
}
原文:http://www.cnblogs.com/zwCHAN/p/4246920.html
内容总结
以上是互联网集市为您收集整理的spark 笔记 11: SchedulingAlgorithm 两种调度算法的优先级比较全部内容,希望文章能够帮你解决spark 笔记 11: SchedulingAlgorithm 两种调度算法的优先级比较所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。