调度器在计算机世界中占有重要地位,从操作系统到大型应用系统都可见其身影,做为分布式应用系统的典范Hadoop以可插拔的方式提供了调度器的功能,这为实现自定义的调度器提供了接口。Hadoop内置了两种类型的调度器,分别为:CapacityScheduler<和FairScheduler,本篇文章将学习CapacityScheduler。CapacityScheduler允许多个用户共享一个大的集群,并为每个用户分配指定的容量,这样每个用户的应用程序就可以在所分配的容量范围内快速获得资源,CapacityScheduler还可以最大化集群的吞吐率和使用率。
考虑下面的场景,假设存在这样的一个公司或者组织,该组织拥有自己的计算集群,该集群拥有充足的容量在峰值或接近峰值时满足该组织的SLA(服务等级协议)。由于只有该组织使用该集群,尽管某些时刻集群的使用率会很高(峰值),但也会出现使用率偏低的情况,此时集群中的资源将处于闲置的状态,而我们所希望的是尽可能地压榨集群的计算能力,显然存在浪费资源的情况。另外如果还有其它集群,那么还需要付出额外的精力管理维护其它集群。如果能够将上述两种情况结合起来,即将集群的数量降为一个,将所有集群上的应用转移到该单一的集群上,并合理在应用间分配资源,那么既可以降低维护管理成本由提高了集群的吞吐率和使用率。以上场景也使用于多个阻止共享集群的情