FAIR公平调度器
代码流程
在fair调度器实例生成时,与fifo的调度器生成时有些许的区别,首先看看fair调度器生成时,需要的流程,由类FairSchedulableBuilder进行的调度器的实现:
在使用fair的调度器时,schedulableBuilder的实现为FairSchedulableBuilder.
schedulableBuilder.buildPools()
接下来看看这个函数的内部实现:
override def buildPools() {
读取spark.scheduler.allocation.file配置项配置的fair调度器的配置文件路径.这个配置必须是xml配置文件.
如果这个配置没有配置,默认从class path中读取fairscheduler.xml配置文件.
var is: Option[InputStream] = None
try {
is = Option {
schedulerAllocFile.map { f =>
new FileInputStream(f)
}.getOrElse {
Utils.getSparkClassLoader.getResourceAsStream(DEFAULT_SCHEDULER_FILE)
}
}
这里解析配置文件中的内容,解析文件过程(这个过程可能没有,没读取到配置文件),可以配置多个,这里会迭代生成:
1,先解析根路径pool,解析这个路径的name属性,得到这个属性的值为poolName.
2,根据pool路径下的子路径schedulingMode,并得到配置的text的值.默认值FIFO,
3,读取pool路径下的子路径minShare.并得到配置的text的值,默认为0.
4,读取pool路径下的子路径weight,并得到配置的text的值,默认值为1.
5,根据上面读取到的配置信息,再生成一个Pool实例,并