yarn
1.1 yarn(分布式资源管理器)
1.1.1 yarn是什么?
yarn是MapReduce第二代,将jobtracker重构呈功能分离成单独的组件。Yarn可以看作一个集群操作系统,他为应用程序提供了基本的服务来更好的利用大的、动态的、并行的基础设施资源。用任何语言编写的应用程序都能顺利用任意规模的Hadoop集群的计算和存储资源。
yarn是一种分层的集群架构,分层的本质是resourcemanager—RM。
- 控制整个集群并管理应用程序向基础计算资源分配;
- 将各资源(计算、内存、宽带等)进行安排给基础nodemanager(yarn的媒节点代理)
1.1.2 yarn主要架构
yarn由三个组件组成:ResourceManager(RM)、Applications Manager—ASM、NodeManager(NM)。
1.1.2.1 ResourceManager
ResourceManager(RM)是一个全局的资源管理器,负责整个系统的资源管理和分配,简称RM。
RM构成:
- Scheduler--调度器:根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序,该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器。
- Applications Manager--ASM 应用程序管理器:负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。
1.1.2.2 ApplicationMaster
ApplicationMaster是应用程序管理器,简称AM。
AM是每个用户作业的主进程,负责管理作业生命周期,包括动态的增加或减少资源使用(container)、管理执行流程(map任务和reduce任务),处理故障和计算偏差以及执行其他的本地优化。
AM的功能
- i. 与RM调度器协商以获取资源--用Container表示;
- ii. 将得到的任务进一步分配给内部的任务(资源的二次分配);
- iii. 与NM通信以执行和监控任务;
- iv. 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
1.1.2.3 NodeManager(NM)
NM是hadoop每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AM的Container启动/停止等各种请求。
1.1.2.4 Container
Container(容器)是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。
单个节点上可以有多个Container。系统中的每个节点可以认为是有内存和CPU的最小容量的多个
Container组成。AM可以请求任何Container来占据最小容量的整数倍的资源。
注释:Container是绑定到特定集群节点的一组资源逻辑组合,可以理解为一个容器。
1.1.3 RM与NM的关系
RM与NM通过心跳通信,RM与每个节点上的NM进程交互。NM负责本地资源的监控,故障报告以及container生命周期的管理(如启动和杀死作业)。RM依赖NM来维护集群的全局视图。
在启动时,NM向RM注册,然后发送包含自身状态的心跳,并等待来自RM的指令。NM的主要目标是管理RM分配给他的应用Container。
1.1.4 Yarn的作业流程
AM与RM、NM是通过可扩展网络协议进行通信的,AM向RM发出资源请求(包括本地化偏好—HDFS的使用、container属性等),当一个资源被调度给一个AM时,RM为该资源生成一个租约,供AM通过心跳获取。Container通过特定协议与AM通信来报告状态和健康信息以及接受框架特定的指令。如下图所示yarn的作业流程
客户端提交作业申请
- 客户端向ResourceManager(后续简称RM)提交作业申请。
- RM根据申请内容返回相关的信息(例如根据input的路径,返回对应的文件元数据,还有作业资源的提交路径)。
- 客户端根据RM返回的信息生成资源文件(job.split、job.xml、app.jar)并将资源文件提交至提交路径(一般存放在hdfs上)
- 资源文件提交完毕,向RM申请运行applicationMaster(后续简称AM)。
2)RM处理用户请求
RM将用户的请求打包为task,放置调度队列,根据当前yarn的调度模式进行调度(YARN提供的三种任务调度策略:FIFO Scheduler,Capacity Scheduler 和 Fair Scheduler)。
3)NodeManager从队列中获取task。
创建contianer容器启动AM和下载资源文件。
4)AM向RM申请运行mapTask容器,RM将请求再打包为task放置调度队列。
其它NM获取到task后会再创建contianer容器并下载资源文件,contianer中的mapTask任务由AM负责监控和调度。
5)AM向maptask发送程序启动命令。
6)contianer运行mapTask
7)当各节点mapTask运行完毕后,AM重复4的步骤(这次申请运行reduceTask)。
程序运行完成后,AM向RM注销自己。
Hadoop1与Hadoop yarn的区别