YARN
YARN功能说明
YARN是一个通用的资源管理系统和调度平台
- 资源管理系统:集群的硬件资源,和程序运行无关,比如内存,cpu等
- 调度平台:多个程序同时申请计算资源如何分配,调度的规则
- 调用:不仅仅支持Mapreduce程序,理论上支持各种计算程序。YARN不关心你干什么,只关心你要资源,在有的情况下给你,用完之后还我
YARN概述
-
可以把Hadoop理解为相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于操作系统之上的应用程序,YARN为这些程序提供运算所需的资源(内存、cpu)
-
因为有了YARN,更多计算框架可以接入到HDFS中,而不单单是MapReduce,正是因为YARN的包容,使得其他计算框架能专注于计算性能的提升
-
HDFS可能不是最优秀的大数据存储系统,但却是应用最广泛的大数据存储系统,YARN功不可没
YARN三大组件
ResourceManager(RM)
YARN集群的主角色,决定系统中的所有应用程序之间资源分配的最终权限,即最终仲裁者
接收用户的作业提交,并通过NM分配、管理各个机器上的计算资源
NodeManager(NM)
YARN中的从角色,一台机器上一个、负责管理本机器上的计算资源
根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。
ApplicationMaster(AM)
用户提交的每个应用程序均包含一个AM
应用程序内的老大,负责程序内部各个阶段的资源申请,监督程序的执行情况
核心交互流程
-
MR作业提交 Client–>RM
-
资源申请 MrAPPMaster–>RM
-
MR作业状态汇报 Container(Map|Reduce Task)–>Container(MrAppMaster)
-
节点的状态汇报 NM–>RM
整体概述
当用户向YARN中提交一个应用程序后,YARN将分为两个阶段运行该应用程序
-
第一个阶段是客户端申请资源启动运行本次程序的ApplicationMaster
-
第二个阶段是由ApplicationMaster根据本次程序内部具体情况,为它申请资源,并监控它的整个运行过程,直到运行完成
MR提交YARN交互流程
-
用户通过客户端向YARN中ResourcrManager提供应用程序(比如Hadoop jar提交MR程序)
-
ResourceManger为该应用程序分配第一个Container(容器),并对应的NodeManager通信,要求它在这个Container中启动这个应用程序的ApplicationMaster
-
AM启动成功之后,首先向RM注册并保持通信,这样用户可以在RM查看应用程序的运行状态(处理百分之几)
-
AM为本次程序内部的各个task任务向RM申请资源,并监控它的运行状态
-
一旦AM申请到资源后,便与对应的NodeManager通信,要求它启动任务
-
NodeManger为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
三种调度器
(1)FIFO Scheduler:是一个先进先出的思想,即先提交的应用先运行
优点:
无需配置,先到先得、易于执行
缺点:
任务的优先级不会变高,因此高优先级的作业需要等待
不适合共享集群
(2)Capacity Scheduler:容量调度是Apache Hadoop3.x默认调度策略。改策略允许多个组织共享整个集群资源,每个组织可以获得集群的一部分计算能力。通过每个组织分配专门的队列,然后在为每个队列分配一定的集群资源
优点:
-
层次化的队列设计:层次化的管理,更加容易、更合理分配和限制资源的使用
-
容量保证:每个队列都可以设置一个资源占比,保证每个队列都不会占用整个集群的资源
3.安全:每个队列有严格的访问控制。用户只能向自己队列里面提交任务,而且不能修改或者访问其他队列任务
-
弹性分配:空闲的资源可以被分配给任何队列,当多个队列出现争用的时候,则会按照权中比例进行平衡
(3)Fair Scheduler:公平调度,提供YARN应用程序公平地共享大型集群中资源的另一种方式
优点::
- 分层队列:对列可以按层次结构排列以划分资源,并可以配置权重以按特定比列共享集群
- 基于用户或组的队列映射:可以根据提交任务的用户名或组来分配队列。
- 资源抢占:根据应用的配置,抢占何分配资源可以是友好的或是强制的。默认不启用资源抢占
- 保证最小配额
- 允许资源共享
- 默认不限制每个队列和用户可以同时运行应用的数量