资源调度器是Hadoop YARN中最核心的组件之一,它是ResourceManager中的一个插拔式服务组件,负责整个集群资源的管理和分配
YARN资源调度器是直接从MRv1基础上修改而来的,它提供了三种可用资源调度器,分别是FIFO、Yahoo!的Capacity Scheduler和Facebook的Fair Scheduler,它们的实现原理和实现细节与MRv1中对应的三种调度器基本一致。
HOD调度器
HOD(Hadoop On Demand)调度器是一个在共享物理集群上管理若干个Hadoop集群的工具,用户可通过HOD调度器在一个共享物理集群上快速搭建若干哥独立的虚拟Hadoop集群,以满足不同的用途
YARN资源调度器的基本架构
基本架构
- 是一个插拔式组件
- 作为一个事件处理器,YARN的资源管理器实际上是一个事件处理器,它需要处理来自外部的6种SchedulerEventType类型的事件,并根据事件的具体含义进行相应的处理
资源表示模型
当前YARN支持内存和CPU两种资源类型的管理和分配。同MRv1一样,YARN采用了动态资源分配机制。NodeManager启动时会向ResourceManager注册,注册信息中包含了该节点可分配的CPU和内存总量,这两个值均可通过配置选项设置
资源调度模型
- 双层资源调度模型
在第一层中,ResourceManager中的资源调度器将资源分配给各个ApplicationMaster
在第二层中,ApplicationMaster再进一步将资源分配给它内部的各个任务
- 资源保证机制
在分布式计算中,资源调度器需要选择合适峰资源保证这样的机制:当应用程序申请的资源暂时无法保证时,是优先为应用程序预留一个节点上的资源直到累计释放的空闲资源满足应用程序需求(称为“增量资源分配”),还是暂时放弃当前资源直到出现一个节点剩余资源一次性满足应用程序需求(称为“一次性资源分配”)
这两种机制均存在优缺点,对于增量资源分配来说,资源预留会导致资源浪费,降低集群资源利用率;而一次性资源分配则会产生饿死现象,即应用程序可能永远等不到满足资源需求的节点出现
YARN采用了增量资源分配机制 ,尽管这种机制会造成浪费,但不会出现饿死现象 - 资源分配算法
为了支持多维资源调度,YARN资源调度器采用了主资源公平调度算法(DRF),该算法扩展了最大最小公平算法,使其能够支持多维资源的使用
在DRF算法中,将所需份额(资源比例)最大的资源称为主资源,而DRF的基本设计思想则是将最大最小公平算法应用于主资源上,进而将多维资源调度问题转化为单资源调度问题,即DRF总是最大化所有主资源中最小的
资源抢占模型
在资源调度器中,每个队列可设置一个最小资源量和最大资源量,其中,最小资源量是资源紧缺情况下每个队列需保证的资源量,而最大资源量则是极端情况下队列也不能超过的资源使用量。资源抢占发生的原因则完全是由于“最小资源量”这一概念
reservation