Y A R N
- Hadoop集群的资源管理系统(ResourceManger->RM)
- 更高级:集群操作系统
– 为应用程序提供了基本服务来更好地利用大的、动态的、并行的基础设施资源 - 负责集群的资源管理和调度
- 使得多种计算框架可以运行在一个集群中
- 在Yarn中,Job的概念换成了application
- 在hadoop2.0中引入,Hadoop2.0对MapReduce框架做了彻底的重构,Hadoop2.0中的MapReduce成为MRv2或者Yarn
特点
- 良好的扩展性、高可用
- 对多种类型应用进行统一管理和调度
- 自带了多种用户调度器,适合共享集群环境
- 相比传统模式,提高了资源利用率、降低运维成本和数据共享成本
执行过程
step1:client请求Rescouce Manager运行一个 Application Master实例
step2:Rescource Manager 选择一个Node Manager,启动一个Container并运行Application Master实例(step 2a,step 2b);
step3:Application Master根据实际需要向RM请求更多的Container资源;
step4:AM通过获取到的Container资源执行分布式计算(step4a、step4b)
RM:Resource Manager ;
1、RM处理客户端请求,接收JobSubmitter提交的作业(上图step1),按照作业的上下文(Context)信息,以及从NodeManage让(NM)收集来的状态信息,启动调度过程,分配一个Container作为App Master
2、RM拥有为系统中所有应用资源分配的决定权,是中心服务,做的事情就是调度、启动每一个Job所属是Application(AM),另外监控AM的存在情况
3、与运行在每个节点上的NM进程交互,通过心跳通信,达到监控NM的目的
4、RM有一个可插拔的调度器组件Scheduler
——Scheduler是一个纯粹的调度器(只负责任务的调度)
NM:Node Manager
1、是slave进程,是每个节点框架代理
2、处理来自RM的任务请求
3、接收并处理来自AM的Container启动、停止等各种请求
4、其责启动应用程序的Container(执行应用程序的容器),并监控他们的资源使用情况(CPU、内存、磁盘、网络),并报告给RM
5、总而言之,在单节点上进行资源管理和任务管理
AM:Application Master,
1、应用程序的Master,每一个应用对用一个AM,在用户提交一个应用程序时,一个AM是轻量行进程实例会启动(Step2),AM协调应用程序内的所有任务执行(多个MAP/REDUCE)
2、负责一个Job生命周期内的所有工作,监控job执行状态和进度,如果任务失败,则重新启动任务
3、每一个job都有一个AM,运行在RM以外的机器上
4、与RM协商资源
——与Scheduler协商合适的Container
5、与NM协同工作,进行Container的监控
6、是一个普通Container的身份运行
Container
1、是任务运行环境的抽象封装
2、Container只是使用NM上指定资源的权利
3、AM必须向NM提供更多的信息来启动Container
4、描述任务的运行资源(节点、内存、cpu)
应用:YARN上的应用按其运行的生命周期的长短可分为长应用和短引用
1、短应用通常是分析作业,作业从提交到完成,所耗时间是有限的,作业完成后,其占用的资源就会被释放,归还给YARN再次分配
2、长应用通常是一些服务,启动后除非意外或人为终止,将一直运行下去,长应用通常长期暂用集群上的一些资源,且运行期间对资源的需求也时常变化。
下面再贴一个从别人那里引用过来的图和过程;更详细的启动过程见链接
https://www.cnblogs.com/admln/p/hadoop2-work-excute-yarn.html
用户向YARN提交一个应用程序后,YARN将分为两个阶段运行该应用程序:第一个阶段是启动ApplicationMaster;第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行成功。
YARN的工作流程可以分为以下几个步骤:
1.用户向YARN提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等;
2.ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster;
3.ApplicationMaster启动后首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7;
4.ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源;
5.一旦ApplicationMaster申请到资源后,则与对应的NodeManager通信,要求其启动任务;
6.NodeManager为任务设置好运行环境(包括环境变量、jar包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;
7.各个任务通过某RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
在应用程序运行过程中,用户可以随时通过RPC向ApplicationMaster查询应用程序的当前运行状态;
8.应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
YARN容错
- RM挂掉:单点故障,新版本可以基于Zookeeper实现HA高可用集群,可通过配置进行设置准备RM,主提供服务,备同步主的信息,一旦主挂掉,备立即做切换接替进行服务
- NM挂掉:不止一个,当一个挂了,会通过心跳方式通知RM,RM将情况通知对应AM,AM作进一步处理
- AM挂掉:若挂掉,RM负责重启,其实RM上有一个RMApplicationMaster, 是AM的AM,上面保存已经完成的task,若重启AM,无需重新运行已经完成的task
YARN的调度器
- FIFO Scheduler:按提交顺序,最简单,大应用占用所有集群资源,不适合共享集群
- Capacity Scheduler:专有队列运转小任务,预先占一定集群资源,导致大任务执行时间落后于FIFO
- Fair Scheduler:不需要预占,动态调整,公平共享