本文是我读《Hadoop Yarn权威指南》的笔记,文字部分是书上的内容摘录,如有误欢迎指出
yarn的架构图如下
为系统中所有应用分配资源。
有一个可插拔的调度器Scheduler,负责为运行中的各种应用分配资源,使用一个叫Container的抽象概念,其中包括多种资源维度,如CPU、内存、磁盘、网络
Scheduler中有三种调度器
每台机器的从属进程,负责启动应用的Container,监视资源使用情况并向ResourceManager报道
NodeManager管理集群中独立的计算节点,管理Container的生命周期并监控每个Container资源使用情况,跟踪节点健康状况,管理日志和应用程序附属服务
启动时NodeManager向ResourceManager注册,发送心跳信息并等待指令
是YARN中的重要新概念。每个应用程序拥有一个ApplicationMaster,是框架相关的,与Scheduler协商合适的Container,跟踪应用程序状态,监控它们的进度,ApplicationMaster本身也以一个Container身份运行
ApplicationMaster会周期性向ResourceManager发送心跳信息以及更新它的资源需求,随后会收到ResourceManager发送的Container租约。由此更新Applicationmaster的执行计划以适应资源的过剩和不足,Container可以在应用程序执行过程中动态分配和释放
应用通过ApplicationMaster可以请求到非常具体的资源,例如资源名称、内存量、CPU等
每个资源模型的属性都有最大值和最小值,ApplicationMaster可以请求最小值整数倍的资源Container
YARN需要允许应用程序共享集群资源,还需要感知集群拓扑提高效率(尽可能减少数据移动)
ResourceManager的Scheduler保存了所有应用程序的资源需求信息,以做出更优资源调度决策
应用程序通过ApplicationMaster请求资源,Scheduler会分配一个Container响应资源需求,ResourceRequest具有如下形式
<资源名称,优先级,资源需求,Container数>
资源请求的过程如图,第5步是ResourceManager向ApplicationMaster发送资源的最大、最小容量信息,ApplicationMaster再决定如何使用资源
Container本质上是一种资源分配形式,是ResourceManager分配资源的结果,为应用程序授予使用资源的权利
ApplicationMaster负责取走Container并移交给NodeManager
ApplicationMaster必须向NodeManager提供更多信息启动Container,ResourceManager将分配NodeManager的控制权交给ApplicationMaster。ApplicationMaster独立联系其指定的NodeManager并提供Container Launch Context,包括环境变量、远程存储依赖文件、安全令牌以及启动进程命令。
运行结束后,NodeManager会清理本地工作目录,如果Container还没有退出(包括ApplicationMaster),NodeManager可以接受ResourceManager的指令去杀死剩余Container
当启动一个Container,ApplicationMaster会指定这个Container需要的文件,YARN框架完成这些文件的本地化
以下是一些相关术语解释:
对每种LocalResource,应用程序都可以指定:
NodeManager根据时间戳检测LocalResource是否被修改过,为了避免不一致的问题,YARN会让依赖被修改的远程文件的Container失败
客户端必须填写ApplicationMaster所需要的资源时间戳,ApplicationMaster启动Container时,会向NodeManager指定资源时间戳
根据可见度具有不同的生命周期。PUBLIC和PRIVATE的LocalResource在磁盘容量紧张时删除,APPLICATION的LocalResource在应用程序结束后立即删除