以队列为单位划分资源,每个队列可设定一定比例的资源最低保证和使用上限,同时,每个用户也可设定一定的资源使用上限以防止资源滥用。而当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列。总之,Capacity Scheduler主要有以下几个特点:
yarn.scheduler.capacity.maximum-applications
设置,默认为10000,而单个队列可通过参数yarn.scheduler.capacity.<queue-path>.maximum-applications
设置适合自己的值yarn.scheduler.capacity.maximum-am-resource-percent
设置,而单个队列可通过参数yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent
设置适合自己的值STOPPED
或者RUNNING
。如果一个队列处于STOPPED状态,用户不可以将应用程序提交到该队列或者它的子队列中。类似的,如果root队列处于STOPPED状态,则用户不可以向集群提交应用程序,但正在运行的应用程序可以正常运行结束,以便队列可以优雅地退出 yarn rmadmin -refreshQueues
”当ResourceManager收到来自NodeManager发送的心跳信息后,将向Capacity Scheduler发送一个SchedulerEventType.NODE_UPDATE事件,Capacity Scheduler收到该事件后,会依次进行以下操作:
yarn.scheduler.capacity.resource-calculator
设置资源比较器参考:《Hadoop 技术内幕:深入解析 YARN 架构设计与实现原理》