资源调度模型
(1)双层资源调度模型
YARN采用双层资源调度模型,第一层,RM中的资源调度器将资源分配给各个AM,第二层,AM将资源分配给内部的任务。
YARN的资源分配是异步的,资源调度器将资源分配给一个应用程序后,不会立刻push到AM,而是放到缓冲区里,等待AM通过周期性的心跳主动来取,即YARN采用了pull-based通信模型。
YARN资源分配过程:
- NM通过周期性心跳汇报节点信息
- RM为NM返回一个心跳ack,包括需要释放的Container列表等信息。
- RM收到NM的信息后,触发一个NODE_UPDATE事件
- ResourceScheduler收到NODE_UPDATE事件后,按照一定的策略将该节点上的资源分配给各个应用程序,并将分配结果放到一个内存数据结构中。(由资源调度器决定)
- AM向RM发送周期性心跳,领取最新分配到的Container
- RM收到AM心跳后,为它分配的Container将以心跳应答的形式返回给AM
- AM收到新分配的Container列表后,会将Container进一步分配给各个任务。(由用户应用程序决定)
(2)资源保证机制
分布式计算中,资源调度器需要选择合适的资源保证机制:当应用程序申请的资源无法保证时,是
- 给应用程序预留一个节点上的资源直到累计释放的空闲资源满足应用程序需求(增量资源分配)
- 还是暂时放弃当前资源直到出现一个节点剩余资源一次性满足应用程序需求(一次性资源分配)
两种各有优缺点:
- 增量分配,资源预留将导致资源浪费,降低集群资源利用率
- 一次性分配:饿死现象,应用程序可能永远等不到一个满足的节点
YARN采用的是增量分配机制,会浪费,但不会饿死。
(3)资源分配算法
主资源公平调度算法DRF