yarn-4

来源:互联网 发布:js random 50 100 编辑:程序博客网 时间:2024/06/01 07:41
客户端资源请求
客户端向ResourceManager发出应用程序请求;
ResourceManager应答一个ApplicationID和协助请求资源的集群信息;

ApplicationMaster Container的分配
得到响应之后,客户端使用Application Submission Context 发出响应给ResourceManager,ApplicationSubmission上下文中包含了ApplicationID,用户名,队列,以及其他启动ApplicationMaster所需要的信息;

container launch context(CLC)也会发给ResourceManager,CLC提供资源需求,作业文件,安全令牌,以及在节点上启动ApplicationMaster需要的其它信息;应用程序被提交之后,客户端也可以请求杀死这个应用程序;

当ResourceManager收到来自客户端的应用程序提交的上下文,他就会为ApplicationMaster调度一个可以用的Container,这个Container通常被称为container0,因为他是ApplicationMaster必须请求其他container;如果没有
适用的container,这个请求必须等待;如果找到了合适的container,ResourceManager就会联系相应的NodeManager并启动ApplicationMaster;此作为步骤的一部分;将建立ApplicationMaster的RPC端口和用跟踪的URL,来监控应用程序的状态;

在注册请求响应中,ResourceManager会发送关于集群的最小和最大容量信息;在这一点上,ApplicationMaster要决定如何使用当前可用的资源,yarn允许应用程序适应当前的集群环境;
基于ResourceManager的可用资源报告,ApplicatiionMaster会请求一定量的Container,该请求可以非常的具体,包括最小资源整数倍的container;ResourceManger会基于调度策略,尽可能的最有的为ApplicationMaster分配container资源,
作为资源请求应答发给Application;
随着作业的执行,ApplicationMaster将心跳和进信息通过心跳发给ResourceManager,在这些心跳中,ApplicationMaster也可以请求和释放container,作业结束时,ApplicationMaster向ResourceManager发出一个finish消息,然后退出;

ApplicationMaster和conatiner管理器的通信
在这一点上,ResourceManager已经将分配NodeManager的控制权交给了ApplicationMaster,AppplicationMaster将独立联系其指定的节点管理器并提供containerLaunch(CLC),CLC包括环境变量,远程存储依赖文件,安全令牌,以及启动实际进程所需要的指令;
当container启动时,所有数据文件,可执行文件以及必要的依赖文件都被拷贝到节点的本地存储上,依赖文件可以被运行中的应用程序的container共享;
NodeManger和ApplicationMaster有点像TaskTracker和JobTracker之间的关系;但是NodeManager可以杀死ApplicationMaster;
一旦所有的container被启动,ApplicationMaster就可以检查她们的状态,ResourceManager不参与应用程序的执行,只处理调度和监控其他资源;ResourceManager可以命令NodeManager杀死container;在ApplicationMaster通知ResourceManager自己完成了,
或者ResourceManager需要为一个应用程序抢占资源,或者container超出资源限制时都可能发生杀死container事件;当container被杀死后,NodeManager会清理它本地的工作目录;作业结束后,ApplicationMaster通知ResourceManager作业成功完成,然后ResourceManager
通知NodeManager聚集日志并清理container的专用文件;如果container没有退出,NodeManager也可以接受指令去杀死剩余的container,包括Application;

管理应用程序的依赖文件
在YARN中,应用程序通过运行container来执行他们的工作,这些container对应与运行在底层操作系统的进程,container上有执行程序的依赖文件,这些文件在启动时或者应用程序在执行的过程中要执行一次或多次,例如在container中启动一个简单的java进程,我们需要一组类文件或者更多的依赖的jar文件;
YARN没有强迫每个应用程序每次都远程访问这些文件或者让他们自己管理这些文件,而是为应用程序提供了本地化这些文件的能力;当启动一个container时,ApplicationMaster可以指定该container需要的所有文件,一旦指定,YARN负责本地化,并且隐藏所有安全拷贝,管理,以及后续的删除等引入的复杂性;


LocalResource的定义
Localization:拷贝下载远程资源到本地文件系统的过程,资源拷贝到本地可以在本地访问,无需远程调用;
LocalResource: LocalResource代表了运行container所需要的文件/库;NodeManager负责在启动container之前将这些资源本地化;对于每种LoccalResource,应用程序都可以指定下面的信息;
URL:待下载的LocalResource的远程地址;
Size:LocalResource的大小 单位是byte;
Creation timestamp:该资源在远程文件系统创建的时间戳;

LocalResourceType:NodeManager本地化的资源类型,包括FILE,ARCHIVE和PARRERN;
Patten:用于从存档文件中提取条目的样式(仅PATTERN类型适用);
LocalResourceVisibility:指定NodeManager本地化资源的可见性,可以是PUBLIC,PRIVATE,APPLICATION;
Container可以请求和使用任何类型的文件来本地化,只要Container对他们的访问是只读的;
LocalResource典型类型:启动container所需要的库文件,container启动后所需的配置文件,静态字典文件;
不适合做LocalResource的类型文件:未来可能被外部模块更新对的共享文件,应用程序本身要直接更新的文件,应用程序要和外部服务共享更新信息的文件;
LocalCache:NodeManager维护和管理所有已下载文件的几种本地缓存,这些资源基于最初拷贝该文件是使用的远程URL做唯一标识;

本地化资源的时间戳(LocalResourceTimeStamp)
NodeManager跟踪container启动前的每个LocalResource的最后修改时间,下载这些文件之前NodeManager检查这些文件是否被修改过,这个检查可以保证LocalResource的视图一致性:应用程序可以在整个运行过程中使用同样的文件内容,而不担心同一文件的并发问题;
一旦文件被从远程位置拷贝到NodeManager的本地磁盘上,它失去了除了URL之外所有与原始文件的关联,对远程文件的修改也不被追踪,因此,外部要更新远程资源,必须通过版本控制;为了避免不一致的问题,YARN会让依赖于被修改的远程文件的container失败;
需要注意的是,ApplicationMaster在一个节点启动container时,会向NodeManager指定资源的时间戳,类似的,运行ApplicationMaser的container,客户端必须填入ApplicationMaster所需要的所有资源的时间戳;
在MapReduce应用程序中,MapReduce JobClient确定MapReduce ApplicationMaster所需要的资源的修改时间戳,然后ApplicationMaster自己再设置MapReduce任务所需要的资源的时间戳;

JobClient与AM AM与NM,container是层层递进的关系,层层M/s关系,操作系统/进程/线程

LocalResource的可见性
LocalResourceVisibility指定LocalResource的可见性,有三种类型,取决于该文件在原存储系统/文件系统如何被可见,访问;

所有标记为PUBLIC的LocalResource(远程URL)可以被任何用户的Container访问,经典的PUBLIC资源在那些远程文件系统上可以被任何人访问,遵循同样的ACL,被拷贝到公共的LocalCache,如果未来由属于同一个或者其他的应用程序(同一个或者其他用户)的container请求同一个LocalResource,则从公共缓存区直接获取服务,
在ResourceCache没有被清除之前,该LocalResource不用再次拷贝或下载;,公共缓存中的所有文件都属于yarn-user(NodeManager运行用户)并具有所有用户都可读的权限,被该节点上运行的各个用户所有的container共享;
使用PRIVATE标记的LocalResource被节点上的同一用户的应用程序所共享;被下载的LocalResource被存在启动该container的用户的私人缓存中,不能被其他用户访问;
APPLICATION
所有标记APPLICATION的资源被节点上的同一个应用程序的container所共享,他们被复制到应用程序专有的Cache,该用户只有可读权限;
指定LocalResource可见度
正在启动container时,ApplicationMaster向NodeManager指定LocalResource的可见度,NodeManager本身对资源不做任何决定或分类,类似的,对于运行的ApplicationMaste的container,客户端需要为ApplicationMaster所需的资源指定可见度;

LocalResource的生命周期
PUBLIC和PRIVATE的在container或应用程序结束之后不会被删除,除非本地磁盘紧张,本地文件的阈值由配置项yarn.nodemanager.localizer.cacche.target-size-mb指定;
APPLICATION范围的LocalResource在应用程序结束之后会被 立即删除;



原创粉丝点击