ResourceManager学习之Application,状态机管理

Application管理

YARN中,Application是指应用程序,他可能启动多个运行实例,每一个运行实例由一个ApplicationMaster与一组该ApplicationMaster启动的任务组成,他拥有名称、队列名、优先级等属性,是一个比较宽泛的概念,能够是一个MapReduce做业、一个DAG应用程序,设置能够是一个Storm集群实例数据结构

(1) ApplicationACLsManager

ApplicationACLsManager负责管理应用程序的访问权限,包含两部分权限:查看权限和修改权限。其中,查看权限主要用于查看应用程序基本信息,好比运行时间、优先级等信息;而修改权限则主要用于修改应用程序优先级、杀死应用程序等。默认状况下,任意一个普通用户能够查看全部其余用户的应用程序。用户能够为本身的应用程序设置具备访问权限的用户列表,具体方法是在客户端使用ContainerLaunchContext#newInstance构造ContainerLaunchContext实例时将其做为参数传入。app

一般而言,为了便于用户设置该参数,运行在YARN之上的计算框架会预留一些参数供用户提交应用程序时动态设置,好比MapReduce计算框架容许用户经过参数mapreduce.job.acl-view-job和mapreduce.job.acl-modify-job为每一个应用程序设置查看和修改权限框架

(2) RMAppManager

RMAppManager负责应用程序的启动和关闭。ClientRMService收到来自客户端的提交应用程序请求后,将调用函数RMAppManager#submitApplication建立一个RMApp对象,它将维护这个应用程序的整个生命周期,从开始运行到最终结束;当RMApp运行结束后,将向RMAppManager发送一个RMAppManagerEventType.APP_COMPLETED事件,他收到该事件后将调用RMARMAppManager#finishApplication进行收尾工做,包括 :函数

  • 将该应用程序放入已完成应用程序列表中,以便用户查询历史应用程序运行信息。须要注意的是,该列表的大小是有限的,默认是10000(管理员可经过参数yarn.resourcemanager.max-completed-applications修改),当已完成应用程序数目超过该值时,将从内存数据结构中移除(移除的应用程序可称为"过时的应用程序"),这样用户只能经过History Server获取过时的应用程序信息,History Server是从磁盘文件中获取这些信息的
  • 将应用程序从RMStateStore中移除。RMStateStore记录了运行中的应用程序的运行日志,当集群故障重启后,ResourceManager可经过这些日志恢复应用程序运行状态,从而避免所有从新运行,一旦应用程序运行结束后,这些日志便失去了意义,故能够对其进行删除。这属于ResourceManager容错机制的范畴
(3) ContainerAllocationExpirer

当一个AM得到一个Container后,YARN不容许AM长时间不对其使用,由于这会下降整个集群的利用率。当AM收到RM新分配的一个Container后,必须在必定的时间内在对应的NM上启动该Container,不然RM将强制回收该Container学习

状态机管理

YARN中,若是一个对象由若干个状态以及触发这些状态发生转移的事件构成,它将被抽象成一个状态机,在YARN ResourceManager内部,共有四类状态机,分别是RMApp,RMAppAttempt,RMContainer和RMNode。其中,前2类状态机维护了一个应用程序相关的生命周期,包括Application生命周期,一次进行尝试的生命周期;RMContainer则维护了分配出去的各个资源的使用状态;RMNode维护了一个NodeManager的生命周期大数据

YARN中的Application生命周期由状态机RMAppImpl维护,每一个Application可能会尝试运行屡次,每次成为一次"运行尝试",而每次运行尝试的生命周期则由状态机RMAppAttemptImpl维护,若是一次运行尝试运行失败,RMApp会建立另一个运行尝试,知道某次运行尝试运行成功或者达到运行尝试上限。对于每次运行尝试,ResourceManager将为它分配一个Container,Container是运行环境的抽象,内部封装了任务的运行环境和资源等信息,而一个应用程序的ApplicationMaster就运行在这个Container中。ApplicationMaster启动以后,会不断向ResourceManager申请Container以运行各种任务。Container的生命周期由状态机RMContainerImpl维护日志

应用程序状态机组织结构

Application Attempt的生命周期与ApplicationMaster的生命周期基本上是一致的 : 一个Application内部全部任务均由ApplicationMaster维护和管理,ApplicationMaster自己须要占用一个Container,而这个Container由ResourceManager为其申请和启动。一旦ApplicationMaster成功启动,他就会与ResourceManager通讯,为它内部的任务申请Container。若是ApplicationMaster从新启动,则意味着一个新的Application Attempt被启动,换句话说,一个Application Attempt的"生死存亡"与ApplicationMaster的"命运"牢牢绑定在一块儿orm

我天天会写文章记录大数据技术学习之路,另外我本身整理了些大数据的学习资料,目前所有放在个人公众号"SmallBird技术分享",加入咱们一块儿学习交流,而且回复'分享'会有大数据资源惊喜等着你~

相关文章
相关标签/搜索