yarn知识点

1、介绍yarn
通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度。可以把yarn理解为相
当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运行于操作系统之上的应用
程序,Yarn为这些程序提供运算所需的资源(内存、cpu)
2、yarn的基本架构
YARN是一个资源管理、任务调度的框架,主要包含三大模块:ResourceManager(RM)、
NodeManager(NM)、ApplicationMaster(AM)。
ResourceManager负责所有资源的监控、分配和管理;
ApplicationMaster负责每一个具体应用程序的调度和协调;
NodeManager负责每一个节点的维护。
对于所有的applications,RM拥有绝对的控制权和对资源的分配权。而每个AM则会和RM协商资
源,同时和NodeManager通信来执行和监控task。
3、yarn三大组件
3.1.ResourceManager
ResourceManager负责整个集群的资源管理和分配,是一个全局的资源管理系统。
NodeManager以心跳的方式向ResourceManager汇报资源使用情况(目前主要是CPU和内存的
使用情况)。RM只接受NM的资源回报信息,对于具体的资源处理则交给NM自己处理。
YARN Scheduler根据application的请求为其分配资源,不负责application job的监控、追踪、运
行状态反馈、启动等工作。3.2. NodeManager
NodeManager是每个节点上的资源和任务管理器,它是管理这台机器的代理,负责该节点程序的
运行,以及该节点资源的管理和监控。YARN集群每个节点都运行一个NodeManager。
NodeManager定时向ResourceManager汇报本节点资源(CPU、内存)的使用情况和Container
的运行状态。当ResourceManager宕机时NodeManager自动连接RM备用节点。
NodeManager接收并处理来自ApplicationMaster的Container启动、停止等各种请求。
3.3. ApplicationMaster
用户提交的每个应用程序均包含一个ApplicationMaster,它可以运行在ResourceManager以外的
机器上。
负责与RM调度器协商以获取资源(用Container表示)。
将得到的任务进一步分配给内部的任务(资源的二次分配)。
与NM通信以启动/停止任务。
监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
当前YARN自带了两个ApplicationMaster实现,一个是用于演示AM编写方法的实例程序
DistributedShell,它可以申请一定数目的Container以并行运行一个Shell命令或者Shell脚本;另
一个是运行MapReduce应用程序的AM—MRAppMaster。
注:RM只负责监控AM,并在AM运行失败时候启动它。RM不负责AM内部任务的容错,任务的容
错由AM完成。
4、YARN作业调度流程
1、客户端程序向ResourceManager提交应用并请求一个ApplicationMaster实例,
ResourceManager在应答中给出一个applicationID以及有助于客户端请求资源的资源容量信息。
2、ResourceManager找到可以运行一个Container的NodeManager,并在这个Container中启动
ApplicationMaster实例
Application Submission Context发出响应,其中包含有:ApplicationID,用户名,队列以及其他
启动ApplicationMaster的信息,Container Launch Context(CLC)也会发给
ResourceManager,CLC提供了资源的需求,作业文件,安全令牌以及在节点启动
ApplicationMaster所需要的其他信息。
当ResourceManager接收到客户端提交的上下文,就会给ApplicationMaster调度一个可用的
container(通常称为container0)。然后ResourceManager就会联系NodeManager启动
ApplicationMaster,并建立ApplicationMaster的RPC端口和用于跟踪的URL,用来监控应用程序
的状态。
3、ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询
ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的
ApplicationMaster直接交互了。在注册响应中,ResourceManager会发送关于集群最大和最小容
量信息,
4、在平常的操作过程中,ApplicationMaster根据resource-request协议向ResourceManager发
送resource-request请求,ResourceManager会根据调度策略尽可能最优的为ApplicationMaster
分配container资源,作为资源请求的应答发个ApplicationMaster
5、当Container被成功分配之后,ApplicationMaster通过向NodeManager发送container-
launch-specification信息来启动Container, container-launch-specification信息包含了能够让
Container和ApplicationMaster交流所需要的资料,一旦container启动成功之后,
ApplicationMaster就可以检查他们的状态,Resourcemanager不在参与程序的执行,只处理调度
和监控其他资源,Resourcemanager可以命令NodeManager杀死container,
6、应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-
specific协议发送给ApplicationMaster,随着作业的执行,ApplicationMaster将心跳和进度信息
发给ResourceManager,在这些心跳信息中,ApplicationMaster还可以请求和释放一些
container。
7、在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状
态、进度更新等信息,交流的协议也是application-specific协议
8、一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统,当container被杀死
或者回收,Resourcemanager都会通知NodeManager聚合日志并清理container专用的文件。
5、hadoop为什么有yarn
首先简单了解hadoop1.x的MapReduce工作原理,为了更好的理解就需要跟hadoop1.x比较。看
到JobTracker的功能被分散到各个进程中包括ResourceManager和NodeManager,比如监控功
能分给了NodeManager和Application Master。
ResourceManager里面又分为了两个组件:调度器及应用程序管理器。也就是说Yarn重构后,
JobTracker的功能,被分散到了各个进程中。同时由于这些进程可以被单独部署所以这样就大大减
轻了单点故障及压力。
同时还看到Yarn使用了Container,而hadoop1.x中使用了slot。slot存在的缺点比如只能map或
则reduce用。Container则不存在这个问题。


版权声明:本文为zjh0101原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。