Hadoop——Yarn
Hadoop——Yarn
1. Yarn功能介绍:
yarn为hadoop的分布式集群资源管理系统,市hadoop2.0的一特性。其特点为
1、支持非mapreduce应用的需求
2、可扩展性
3、提高资源是用率
4、用户敏捷性
5、可以通过搭建为高可用
2.Yarn组成部分:
-
ResourceManger
ResourceManger用来主要有两个功能。一个是任务分配,一个是资源调度。其中ApplicitionManager执行任务分配,Scheduler来进行资源分配。根据客户端程序的需求,调度优先级以及可用资源情况,动态分配特定节点运行应用程序。与NodeManager和ApplicationMaster相互协调工作。- Schedulor
Schedulor在ResourceManger中属于纯调度器,负责各个运行中的应用的资源分配,受到资源容量,队列以及其他因素的影响。不负责应用程序的监控和状态追踪,不保证应用程序的失败或者硬件失败的情况对task重启,而是基于应用程序的资源需求执行其调度功能,使用了叫做资源container的概念,其中包括多种资源,比如,cpu,内存,磁盘,网络等。 - ApplicationManager
ApplicationManager用来接收客户端Client提交的job,找到合适的NodeManager启动ApplicationMaster,负责监控ApplicationMaster,遇到错误时,重启ApplicationMaster运行的Container。
- Schedulor
-
NodeManager
NodeManager是yarn节点的一个工作进程代理,主要与ResourceManager保持通信,负责启动和管理Container,监听Container的资源使用情况,管理日志,报告给ResourceManger。
NodeManager启动时,向ResourceManger注册,发送心跳包来等待任务分配,接收到指令后启动Container应用程序,NodeManager只负责管理Container,并不清楚具体的处理细节。NodeManager与ResourceManger直接会一直保持联系,更新Container应用信息。
主要职责:
1、接收ResourceManager的请求,分配Container给应用的某个任务
2、和ResourceManager交换信息以确保整个集群平稳运行。ResourceManager就是通过收集每个NodeManager的报告信息来追踪整个集群健康状态的,而NodeManager负责监控自身的健康状态。
3、管理每个Container的生命周期
4、管理每个节点上的日志
5、执行Yarn上面应用的一些额外的服务,比如MapReduce的shuffle过程- Container
Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。一个NodeManager中可以启动多个Container,一个Container只会存在与一个NodeManager,不会跨节点计算。
一个Container即从ResourceManager中Schedulor调度过来的已分配的cpu和内存,由NodeManager监控。
ApplicationMaster即为第一个Container。ApplicationMaster会与ResourceManager协调,根据需求申请新增多个Container,在任务进行过程中也可以动态释放和申请Container。
- Container
-
ApplicationMaster
ApplicationMaster是协调集群中应用程序执行的进程。可以监控Container的执行进度。每个Client对应一个ApplicationMaster来分配Container。
ApplicationMaster负责与ResourceManager协商资源(container)和NodeManager协同工作来执行和监控任务 。
3.Yarn框架作业流程:
- 客户端Client向ResourceManager提交job请求,并请求一个AppMaster实例
- ResourceManager向其中一个NodeManager发送AppMaster请求,包含各种资源信息,并创建实例,并建立ApplicationMaster的RPC端口和用于跟踪的URL,用来监控应用程序的状态
- ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了。在注册响应中,ResourceManager会发送关于集群最大和最小容量信息
- 在平常操作中,ApplicationMaster根据resource-request协议向ResourceManager发送resource-request请求,ResourceManager会根据调度策略尽可能最优的为ApplicationMaster分配Container资源,作为资源请求的应答发个ApplicationMaster
- ApplicationMaster会与NodeManager进行通讯,让NodeManager来启动Container,并配合NodeManager对Container进行监控。ResourceManager不参与Container的监控,ResourceManager可以命令NodeManager杀死Container
- 应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议发送给ApplicationMaster,随着作业的执行,ApplicationMaster将心跳和进度信息发给ResourceManager,在这些心跳信息中,ApplicationMaster还可以请求和释放一些container。
- 在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议也是application-specific协议
- 一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统,当container被杀死或者回收,Resourcemanager都会通知NodeManager聚合日志并清理container专用的文件。