1. YARN基本组成结构
RM=调度器+应用程序管理器ASM
调度器:纯调度器,不做与具体应用程序相关的工作,可插拔,用户可以设计新的调度器
ASM:负责整个系统中所有的应用程序,包括应用程序提交、与调度器协商资源以启动AM,监控AM运行状态并在失败时重启
AM:每一个应用程序都要有一个AM,功能:与RM调度器协商获取资源(用container表示);将得到的任务进一步分配给内部的任务;与NM通信以启动/停止任务;监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启
NM:定时向RM汇报本节点上资源使用情况和container运行状态;接收并处理来自AM的container启动/停止要求
Container:资源抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。动态资源划分单位(与MR1中slot区别)
2. YARN通信协议
Client-RM: ApplicationClientProtocol
Admin-RM: ResourceManagerAdministrationProtocol
AM-RM: ApplicationMasterProtocol
AM-NM: ContainerManagementProtocol
NM-RM: ResourceTracker
3. YARN工作流程
用户向yarn提交应用程序,包括AM程序、启动AM命令、用户程序
RM为应用程序分配第一个container,并与对应的NM通信,要求它在这个container启动应用程序的AM
AM首先向RM注册,使用户可以直接通过RM查看应用程序运行状态,然后它为各个任务申请资源,监控运行状态,直到结束
AM采用轮询的方式通过RPC协议向RM申请和领取资源
一旦AM申请到资源,与对应NM通信,要求它启动任务
NM为任务设置好运行环境(环境变量、jar、二进制程序etc),将任务启动命令写到一个脚本,通过运行脚本启动任务
各个任务通过RPC协议向AM汇报自己状态和进度,用户可随时通过RPC向AM查询应用程序当前运行状态信息
运行完成后,AM向RM注销并关闭自己。
4. YARN分布式缓存
Yarn分布式缓存工作流程:
client将应用程序需要的文件资源(外部字典、jar、二进制文件)提交到hdfs;
client将应用程序提交到resourcemanager
RM与某个NM通信, NM收到命令后,从hdfs下载文件缓存,启动AM
AM与RM通信,以请求和获取计算资源
AM收到新分配的计算资源后,与对应的NM通信,以启动任务
如果该应用程序第一次在该节点上启动任务,则NM首先从hdfs下载文件缓存到本地,然后启动任务
NM后续收到启动任务请求后,如果文件已在本地缓存,则直接运行任务,否则等等文件缓存完再启动