yarn-3

来源:互联网 发布:ubuntu skype登录闪退 编辑:程序博客网 时间:2024/05/16 18:35
yarn的远程调用机制是使用的java NIO的,使用了套接字;
yarn中的过程
首先客户端发出作业请求;
体系架构概述
中心resourceManager作为一个独立的守护进程运行在专门的机器上;为集群中的所有应用程序分配资源;
ResourceManager拥有了所有集群资源主要,全局的试图,此为资源和作业状态等视图;
因此可以为用户提供公平的,基于容量的,本地化的资源调度;
根据应用程序的需求,调度优先级以及可用资源情况来动态的分配特定节点;
container是绑定到特定集群节点的一组资源的逻辑组合;为了执行和跟踪这些资源分配,ResourceManager与
运行在每个节点上的NodeManager进行交互;基于扩展性的需求,ResourceManager和NodeManager之间通过心跳机制通信;

NodeManagers负责可用资源的监控,故障报告以及container生命周期的管理(比如启动和杀死作业);ResourceManager以来NodeManager来维护集群的全局视图;
用户的应用程序通过一个公共协议提交给ResourceManager,在其访问控制阶段需要验证安全证书,并执行各种操作和管理的检查;
这些被ResourceManager接受的应用程序会传递给Scheduler并允许其运行;一旦Scheduler有足够的资源可以满足需求,应用程序就从accepted转换到running;
 RM会为ApplicationMaster 分配一个Container,并且负责在节点上拉起它;
ApplicationMaster通常被称为Container0;在这点上,他不会获得任何额外对的资源,并且需要请求和释放额外的Container;
ApplicationMaster是每个用户作业的主程序,负责管理作业的生命周期,包括动态增加或减少资源的使用(即container)管理执行流程(mapreduce),处理故障和计算偏差,以及执行其他的本地优化;

ResourceManager和NodeManager都使用了Protocol Buffers;通过将RM的一些职能给了AM,使得yarn有了很大的扩展性;
ResourceManager作为主节点是集群所有可用资源的仲裁者,从而帮助管理在yarn系统上运行的分布式应用,他与每个节点上的NodeManager和每个应用程序的ApplicationMaster协同工作;
在yarn中,ResourceManager的主要职责是调度,即在竞争的应用程序之间分配系统中的可用资源,但不关心每个应用程序的状态管理,调度器只负责处理应用程序的整体资源分配忽略局部优化和内部应用程序流;
事实上,不同于对Map和Reduce槽位做静态分配,YARN将整个集群看作一个资源池。如所述的清晰的模块职责分隔,使得ResourceManager可以满足可扩展性的重要要求并支持编程模型的替换;
与其它工作流调度器不同,ResourceManager运行中的运行程序中回收资源;
ResourceManager主要由两个组件构成:调度器(scheduler)和应用管理器(ApplicationsManager,ASM)
调度器
调度器根据容量,队列等限制条件(如每个队列分配一定的资源,最多执行一定量的作业)将系统的资源分配给各个正在运行的应用程序;此调度器是纯调度器,只负责调度分配资源;
调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是由Container表示;container是一个动态资源分配单位,将各种资源封装到一起来限定每个任务的资源量和隔离任务;此外,该调度器是一个可插拔组件,
用户可根据自己的需求设计新的调度器,YARN提供了直接可以用的多种调度器,fair,FIFO,Capacity;
FIFO调度器
先进先出,先来先服务的队列,不考虑优先级和范围,符合低负载集群;
Capacity(容量)调度器
允许多个组安全的共享一个大规模集群为了使用capacity调度器,管理员使用总槽位或处理器容量的预定值配置一个或多个队列,这种分配保证了每个队列的最小资源使用量;管理员为每个队列的可用资源配置了软限定和可选的硬限定;;
每个队列有着严格的访问控制列表,用于控制那些用户可以向各个队列提交作业;另外也有措施来保证用户无法查看或修改其他的应用程序;
容量调度器允许共享集群,同时给每个用户或组一定的最小容量的保证,这些最小值在不需要的时候可以放弃超出的容量将给那些最饥饿队列,其中饥饿程度用运行中或者已用的队列容量来衡量;
因此,由最初是的最小容量保证所定义的最满队列将获得最需要的资源;空闲容量将以最具成本效益的方式弹性的提供给用户;
队列的定义和属性(比如容量和ACL)可以由管理员以安全的方式,在运行时更改,以尽量减少对用户的干扰;
管理员可以在运行时添加额外队列,但队列不能在运行时被删除,此外,当队列中的运行程序运行完毕,没有新的应用程序被提交时,可以停止队列;
Capacity调度器目前支持内存密集型应用程序,其中应用程序可以制定比默认值更高的内存需求;capacity调度器根据来自NodeManager的信息,可以将Container放到最适合的节点上;
当工作负载可以遇见的时候,capacity调度器效果最好,这有助于分配最小容量;为了让该调度器有效工作需要为每个队列分配小于最高预期负载的最小容量;在每个队列内部,使用层次化的FIFO来调度多个应用程序
Fair(公平)调度器Fair调度器提供了共享大集群的另一种方法,公平调度是将资源公平分给应用的方法,使得所有应用在平均的情况下随着事件得到相等的份额;
在fair调度模型中,每个应用都属于某一个队列,YARN container的分配时选择使用了最少资源的队列,然后在此队列中选择使用最少资源的应用程序。默认情况下,所有用户共享一个叫defuallt的队列;如果一个应用程序在资源中指定了该队列,
则将请求提交到该队列。fair还可以根据请求中包含的用户名,队列的权重,最大份额,最小份额,FIFO等等,但基本思想时尽可能公平的分配队列;
在fair调度器下,如果单个应用程序正在运行,该应用程序可以请求整个集群资源;若有其他程序提交,空闲资源可以被fair的分配给新的应用程序,使得每个应用程序获得大致相等的资源;
fair调度器也支持抢占的概念,从而可以从ApplicationMaster要回Container,该抢占可以是友好的也可以时强制的;
除了提供公平共享,fari调度器还提供保证队列的最小份额,这确保某些应用程序,组,用户等总能得到足够的资源;YARN的fair调度器允许container请求一定量的内存资源,还有支持层次化队列;
队列之间由较大差别时,fair调度器效果最好不同于capacity调度器,所有作业都可以取得进展,而不是FIFO方式在各自的队列中进行;
应用程序管理器
应用程序管理器负责管理整个系统中所有的应用程序,包括应用程序的提交,与调度器协商资源以启动APplicationMaster,监控ApplicationMaster运行状态并在失败时重新启动它;


container
在最基本的层面,container是单个节点上如RAM,CPU核,磁盘等物理资源的集合;单个节点上可以有多个container,单个节点可以当作是由多个container组成的;ApplicationMaster可以请求任何container来占用节点资源;
container由NodeManager监控,由ResourcceManager调度;每一个应用程序都从ApplicationMaster开始,它本身就是一个container(通常被称为container0),一旦启动,ApplicationMaster就与ResourceManager协商更多的container;
运行过程中可以动态的请求和释放container;

NodeManager是YARN节点上的工作进程的代理,管理hadoop集群中独立的计算节点;其职责包括ResourceManager保持通信,管理container的生命周期,监控每个container的资源使用情况,跟踪节点健康状况,管理日志和不同应用程序的附属服务;
在启动时,NodeManager向ResourceManager注册,然后发送了包含自身状态的心跳,并等待来自ResourceManager的指令;它的主要目标是管理ResourceManager分配给它的应用程序container;

ApplicationMaster
ApplicationMaster是协调集群中的应用程序执行的进程;每个应用程序都有自己独特的ApplicatioonMaster,负责与ResourceManager协商资源(container),并与NodeManger协同工作来执行和监控任务;
一旦ApplicationMaster(作为一个container)启动后,他会周期的向ResourceManager发送心跳来确认其健康状况以及更行资源需求;在建好需求模型之后,ApplicationMaster在发往ResourceManager的心跳中封装好他的偏好和限制;在随后的心跳答应中,
ApplicationMaster会收到对集群特定节上绑定了一定资源的container的租约,根据ResourceManager发来的container,ApplicationMaster可以新更它的执行计划以适应资源的过剩和不足。container可以在执行过程中动态的分配或释放;