yarn-5

来源:互联网 发布:淘宝网买的基金 编辑:程序博客网 时间:2024/06/03 07:29
yarn各个组件分析交互
ResourceManager
ResourceManager时Master,仲裁集群中所有的可用资源,从而帮助管理运行在yarn平台上的分布式应用程序,它和以下组件一起运行;
每个节点的NodeManager,从ResourceManger获取指令,管理单个节点的可用资源,并接收ApplicationMaster的资源请求;每个应用程序的ApplicationMaster,职责是向ResourceManager申请资源并且和NodeManager一起工作,启动,监视,停止container;
 
客户端和ResourceManager的交互
ClientService
这个服务实现了基本的客户端到ResourceManager的接口ApplicationClientProtocol,该组件处理所有来自客户端到ResourceManager的远程过程调用;
包括应用提交;应用终止;获取应用程序,队列,集群统计,用户ACL及更多的信息;对于用户请求的身份认证和访问控制表来提供保护,前提是在安全模式下;Administration Service
对于另外的一些活动是YARN集群的管理器经常要执行的,为了确保管理员的请求不被一般的用户的请求饿死, 提供了高优先级的操作指令;给所有管理员操作服务提供了一个分离的接口;叫做AdministratiionService;ResourceManagerAdministrationProtocol是该组件实现的通信协议;
该组件的用处为刷新列表,刷新ResourceManager处的节点列表,添加新的用户组,添加新的管理员的ACL,修改超级管理员列表;  
 
一旦应用程序通过ResourceManager中的面向客户端的服务,别介纳入系统,它穿过ResourceManager内部负责拉起ApplicationMaster的状态机,下面描绘了当ApplicationMaster启动后如何和ResourceManger通信的;
ApplicationMaster Service
该组件相应来自所有ApplicationMaster的请求,它实现了ApplicationMasterProtocol协议,这是ApplicationMaster跟ResourceManager通信的唯一协议;
他负责:注册新的ApplicationMaster; 来自任意正在结束的ApplicationMaster的终止/取消注册请求;认证来自不同的Application的所有请求,确保只有合法的ApplicationMaster发送的请求传递给ReaourceManager中的应用程序对象;获取来自所有运行ApplicationMaster的Container的分配和释放请求,异步的转发YARN的调度;
在ResourceManager上的ApplicationMaster的RPC都是串行的,在同一时刻只有一个Application的一个线程可以发送给ResourceManager;
ApplicationMaster存活监控
为了帮助管理活跃的以及不响应/死的Ap0plicationMaster,这个监视器跟踪每个ApplicationMaster以及它最后的心跳时间;配置时间间隔内吗默认十分钟没有产生心跳的任何ApplicationMaster被认为是死亡并且在ResourceManager中超时;所有处在运行/分配状态,并且从属一个超时的APplicationMaster的container也被标记为死亡;
ResourceManager重新调度这个应用程序,并在一个新的container上运行一个新的Application实例,默认情况下最多允许两次这样的尝试;
 
节点和ResourceManager的通信
Resource Tracker Service
NodeManager周期行发送心跳给ResourceManager,ResourceManager的该组件负责响应来自所有节点的这些RPC;它实现了ResourceTracker接口来和来自所有NodeManager通信。具体任务如下:
注册新节点;接受前面注册节点的心跳;
确保只有合法的节点可以和ResourceManager通信,拒绝其他不合法的节点;
非法或退役的节点会被拒绝;跟随一个成功的注册,Resourcemanager在它注册响应会发送NodeManager需要的Application相关请求的认证container安全相关主键;NodeManager需要验证ApplicationMaster提交的作为Container拉起请求的一部分的NodeManaer令牌和container令牌,下面的主键会每个一段时间滚动更新以确保安全;
Resource Tracker Service转发了一个合法的心跳给YARN调度器随后根据节点的空闲空用资源及不同应用程序资源请求做调度决定;
NodeManager存活监控
该组件跟踪每一个节点的标识符ID和它最后的心跳时间,当没有在配置时间内传递心跳,则会被认为死亡且在ResourceManager中超时,默认时间间隔为10分钟,所有超时的节点所在的container都会被标记为死亡,并且不会有新的contianer被调用过来,撞到该节点被重启;
 
Nodes-List Manager
Node-List manager是在ResourceManger内存中的一个集合,包括有效的节点和被排除的节点;
 
ResourceManager核心组件
前面的不同组件,将其绑定在一起,来展示Resource的核心框架;
ApplicationManager
ApplicationManager负责管理已提交的应用 程序的集合;在应用程序提交之后,首先检查应用程序的规格,拒绝ApplicationMaster资源请求不合法的应用程序,然后确定有没有其他已提交的应用程序已经使用了相同的ID,这个场景可以由一个错误或恶意的客户端造成,最后把通过检查的应用程序转给调度器;该组件还负责记录和管理已结束的应用程序,过一段时间才从ResourceManager的内存中清除当一个应用程序结束,他将一个ApplicationSummary放到后台的日志文件中;ApplicationSummary是一个应用程序在结束的时候的信息总结;最后,ApplicationManager保存一个已经结束的应用程序的缓存,以便用户请求这些应用程序的数据;yarn.resourcemanager.max-completed-appliction配置属性控制了ResourceManager暂存的已经结束的应用程序的最大数量,该缓存是一个FIFO的列表;最旧的应用程序会被新结束的应用程序覆盖;
ApplicationMaster Launcher
在YARN中,每一个其他类型的container的拉起是有ApplicationMaster拉起的,ApplicationMaster本身的container是由ResourceManager申请的,并在NodeManager上准备和拉起;
ApplictionMaster Launcher是负责该项工作的mazurian为何一个线程池来设置环境,其和NodeManager通信来拉起新提交的ApplictionMaster;或者因为某些原因的失败的先前应用程序实例失败的ApplictionMaster.它也在一个应用程序正常结束或者要强行终止时负责告诉NodeManager来清理ApplictionMaster(主要是杀掉相应的进程);
Yarnscheduler
YARN调度其负责给正在运行的应用程序分配资源,这些应用程序收到容量,队列,和个方面的限制;他是基于应用程序的资源需求来执行调度功能;
ContainerAllocationExpirer(容量分配失效/协议)
该组建负责确保所有分配的contaier最终被ApplictionMaster使用,并在相应的NodeManager上拉起;ApplictonMaster运行着非可信任的用户代码;可能拿到分配的container而不使用他们shebang,将降低资源的使用率,浪费集群资源;为解决这个问题,containerAllocationExpirer包含了一个已分配但还没在相应NodeManager上启动的container列表direlycontainer,在一个配置的时间间隔如果相应的NodeManager没有报告给ResourceManager该container已经运行了,在ResourceManager中该容器被当作死亡处理并且超时;
ResourceManager安全相关组件
ResouceManager有一系列组建叫做SecretManager,负责管理令牌和私钥,这些令牌和私匙用来对各个RPC接口上的请求进行认证和授权;
NodeManager
NodeManager是hadoop YARN在每个计算节点上的代理,它根据YARN应用程序的要求,使用节点上的物理资源来运行container,NodeManager本质上是YARN的工作守护进程;有以下功能:
保持与ResourceManager的同步,跟踪节点的健康状况,管理各个container的生命周期,监控每个container的资源使用情况,管理分布式缓存(对container所需需的JAR,库文件,以及本地文件系统的缓存等;)管理各个container生成的日志;不同的YARN应用可能需要的辅助服务;这些职责中container的管理是NodeManager的核心功能,NodeManager接受来自ApplicationMaster的启动或停止container的请求,对container进行鉴权,管理container执行的依赖库,监控container的执行过程;管理员通过配置文件来配置每个NodeManager的资源,包括节点上的内存,CPU以及其他的可用资源;向ResourceManager成功注册之后,NodeManager通过周期性的心跳汇报自己的状况并接收ResourceManager可能发来的指令;Scheduler处理一个节点上的心跳时,会在相应的NodeManager上分配相应的container,随后通过ApplictioinMaster与ResourceManager与ResouceManager的心跳将其返回给ApplicationMaster;在YARN中,包括ApplicationMaster在内的所有container都通过container Launch context来描述;在真正的拉起一个container之前,NodeManager会将所有需要的库文件下载到本地,这些下好的库文件可以通过本地应用级别缓存被同一个应用的多个container共享,当然,具体要视修饰符而定;NodeManager也可以按照ResouceManager的指示去杀死container;
NodeManager组件
在NM刚启动时,NodeStatusUpdater组件会向ResouceManager注册;发送本节点的可用资源,以及NodeManager的webServer和RPCServer的监听端口ResouceManager在注册的过程中,向NodeManager发出安全相关的Key,NodeManager将用这个key为ApplicationMaster的container请求做认证;后续的NodeManager-ResouceManager的通信向ResouceManager提供当前的container的更新信息,ApplcationMaster新启动的container信息,完成container信息等等;有时候还会通过这个组件,ResouceManager向NodeManager发出杀死container的请求,或者通常的应用程序资源清理,日志聚集;
containerManager
此组件是核心组件,包含多个组件:RPCServer:containerManager接受ApplicationMaster启动新的container或者停止运行中的container的请求;与NMTokenSecretManager和containerTokenSecretManager协同工作来对所有的请求做认证和鉴权;运行在本节点上的所有container操作都会记录到审计日志中,这些日志方便安全工具做后续处理;资源本地化服务;
辅助服务
管理元可以为NodeManager配置一组可插拔的辅助服务,NodeManger提供了一个可以通过配置这些服务扩展了其他功能的框架;这个特性允许为单个节点定制特定框架可能需要的自定义服务,将他们放到一个沙盒中,与NodeManager其他部分隔离;这些服务必须在NodeManger启动前配置;当一个应用程序的地一个container在节点上启动是,当任何container启动或者完成时,以及最终当应用程序被确认完成时;都要通知辅助服务;经典辅助服务为shuffler;
contaiersMonitor
当一个container被拉起之后,containerMonitor组件将会在container的整个运行过程中监视他的资源使用率while加强个理性以及公平的共享内存等资源,每个container都别ResourceManger非陪了一定资源,containerMonitor持续的监控每个container的资源使用率,如果有container超出了他的分配值,这个组件会将该container杀死,这种检查避免了不受控制的container影响同一个节点上正常运行的container;
LogHandler
LogHandler是一个可插拔的组建,提供了两种选择:保存container的日志文件在本地磁盘上或者将他们打包上传到一个文件系统上;
containerExecutor
这个NodeManger组件与底层的操作系统交互,安全的放置container需要的文件和目录,随后以一种安全的方式负责启动启动和清理container相关进程;
NodeHealthCheckerService
NodeHealthCheckerService通过定期运行配置的脚本,提供了对节点健康度的检查;有时也会在磁盘上创建临时文件来监控磁盘的健康度rene系统健康度的改变都发给NodeStatusUpdater,然后经其传递给ResourceManager;
NodeManager安全组件
NodeManager的applicationACLsManager
这个组件为每个应用程序维护了ACL,强制执行访问权限;
containerTokenSecretManager:验证各种传入的请求,确保所有启动的container的请求是被ResourceManager授权的;
NMTokenSecretManager:来验证所有来自API的请求,保证这些请求都是使用NMToken认证的;
WebServer:展现给定时间点一个节点上运行的应用程序和container列表,节点健康度信息,以及container生成的日志;
NodeManager的重要功能
container的启动:NodeManager获取了container运行时的信息,当作container参数的一部分;收到contaienr-launch请求之后,NodeManager验证这个请求,然后创建指定资源的本地副本(分布式缓存),为container创建独立的工作目录,通过创建与下载资源的软链接的方式让本地资源可以在工作目录中可以访问,启动container的环境以及命令行;
用户日志管理以及聚集,shuffle(辅助服务);
 
ApplicationMaster
每个应用程序的AppliationMaster都是一个引导程序,一旦应用程序的提交通过了,且自身加载完成,它就开始启动所有工作;本质上Application是每个应用程序的JobTracker;
一旦一个应用程序被提交之后,应用程序在ResourceManager中代表的将申请一个container来启动该引导程序,一旦分配了container,ApplicationMaster的启动器将直接与ApplicationMastercontainer相应的NodeManager通信以设置并启动该container,ApplicationMaster的生命周期就这样开始了,它与YARN的其余部分互动的简要如下:这个过程以应用程序提交一个请求到ResourceManager开始,接着,ApplicationMaster启动,向ResourceManager注册,ApplicationMaster想ResourceManager请求container执行实际的工作,将分配的container告知NodeManger以便ApplicationMaster使用,计算过程在container中进行,这些container将与ApplicatioinMaster(不是ResourceManager)保持通信,并告知任务过程,当应用程序完成后,container将被停止,APplicationMaster从ResourceManager中注销;
一旦成功启动,ApplicationMaster将初始化,向ResourceManager报告自己活跃信息的进程,计算应用程序的资源需求,将需求转换成YARN调度器可以理解的ReqsourceRequest,与调度器协商申请资源,与NodeManager合作使用分配的container,跟踪正在运行的container的状态,监控他们的进程,对container或者节点失败情况进行处理,在必要的情况下重新申请资源;启动container时,需要构建containerlaunchcontext对象;
container
container一旦构建完毕并启动,不与NodeManager通信,通常只是独立的执行自己的工作,Application通过NodeManager或NodeManager-ResourceManager-Application协议来获得container的完成情况;
应用程序想知道container的情况要靠应用程序/框架协议来通信;
 
 

原创粉丝点击