一、YANR 架构
图中一共有 2 大块元素,一块是 ResourceManager,一块是 NodeManager 。
ResourceManager: 可以看到,ResourceManager 是负责资源的管理与调度,再加上一个启动 ApplicationMaster,注意:这里的调度是纯粹的资源调度,不涉及任务调度,任务调度应该是在 AM 中完成的。
NodeManager:NodeManager 是单台节点上的资源和任务管理器,在 NodeManager 上面完成计算功能。
ApplicationMaster:负责向 RM 申请资源,启动、监控任务,是 NodeManager 和 ResourceManager 之间的桥梁,避免它两之间通信可以做到解耦。当用户向 ResourceManager 提交任务后,RM 会首先找到可用的 NM,在其中分配一个 Container,在其中启动 AM,。
Container: Container 是资源的抽象,就像我们 Windows 系统中的虚拟机,虚拟机可以利用 Windows 的资源,然后再这个资源上可以启动 Linux 或者 Mac,同样,在 YARN 中的Container 中,我们也可以启动 MapReduce 或者 Spark 的任务。
要理解这些元素的作用是什么,主要还是得理解整个框架的工作流程。
综上,YARN 做到了解耦合,我们随便上来一个计算框架,只要把自己的任务调度器加进来,然后把 Task 换成自己对应的 Task 即可。
二、YARN 的资源调度模型
2.1 Capacity 调度
Capacity 是以队列为单位划分资源的,每个队列预先设定一定比例的资源最低保证和使用上限,每个用户提交任务时,yarn 首先判断哪个队列的资源利用率最低,就把这个任务分配到了该队列;当一个队列中的资源有剩余时,可以先把资源借给其它队列,当自己要用的时候,其它队列就会释放资源后归还给该队列。
2.2 Fair 调度
公平调度器是以整个集群的资源为划分单位的,如:现有 A,B 两个用户,A 用户先提提交了一个任务 A1,这时 A1 将可以使用集群的全部资源,它所用的资源用 queueA 来表示;后来用户 B 也提交了一个任务 B1,此时基于公平, A1 和 B1 平分资源,各使用 50% 的资源,B1 所占的队列称为 queueB;再后来,用户 B 又提交了任务 B2,此时 B2 和 B1 共同使用 queueB 中的资源,它们各占 queueB 资源的 50%,各占整个集群资源的 25%。