当用户向 YARN 中提交一个应用程序后, YARN将分两个阶段运行该应用程序 。
第一个阶段是 客户端申请资源启动运行本次程序的 ApplicationMaster ; 第二个阶段是由 ApplicationMaster 根据本次程序内部具体情况,为它申请资源,并监控它的整个运行过程 ,直 到运行完成。 MR提交YARN交互流程 第 1 步 、用户通过客户端向YARN中ResourceManager提交应用程序(比如hadoop jar提交MR程序); 第 2 步 、ResourceManager为该应用程序分配第一个Container(容器),并与对应的NodeManager通信,要求它在这个Container中启动这个应用程序的ApplicationMaster。 第 3 步 、ApplicationMaster启动成功之后,首先向ResourceManager注册并保持通信,这样用户可以直接通过 ResourceManage查看应用程序的运行状态(处理了百分之几); 第 4 步 、AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态; 第 5 步 、一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务。 第 6 步 、NodeManager 为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务 第 7 步 、各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随 时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过 RPC 向 ApplicationMaster 查询应用程序的当前运行状态。 第 8 步 、应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。 Scheduler:资源调度控制 三种调度器: FIFO Scheduler(先进先出调度器):先来后到原则,即先提交的任务先占用资源,无法设定优先级。适用于负载较低的小集群。最原始的调度器。 Capacity Scheduler(容量调度器):Apache默认调度器, 该策略允许 多个组织共享整个集群资源 ,每个组织可以获得集群的一部分计算能力。 通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源, 这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。 Capacity Scheduler调度器以队列为单位划分资源。简单通俗点来说,就是一个个队列有独立的资源,队列的结构 和资源是可以进行配置的。 特性:层次化的队列设计、容量保证、安全、弹性分配 Fair Scheduler(公平调度): Fair Scheduler设计目标是为所有的应用分配公平的资源(对公平的定义通过参数来设置)。 公平调度可以在多个队列间工作,允许资源共享和抢占。 如何理解公平: 有两个用户A和B,每个用户都有自己的队列。 A启动一个作业,由于没有B的需求,它分配了集群所有可用的资源。 然后B在A的作业仍在运行时启动了一个作业,经过一段时间,A,B各自作业都使用了一半的资源。 现在,如果B用户在其他作业仍在运行时开始第二个作业,它将与B的另一个作业共享其资源,因此B的每个作业将拥有资源的四分之一,而A的继续将拥有一半的资源。结果是资源在用户之间公平地共享。 特性优势: 分层队列、基于用户或组的队列映射、资源抢占、保证最小配额、允许资源共享、默认不限制每个队列和用户可以同时运行应用的数量


