这是我参与「第四届青训营 」笔记创作活动的的第13天。
Yarn组成
由于Yarn良好的兼容性和扩展性,目前可以支持大部分数据引擎,所以了解Yarn的资源调度原理很有必要,Yarn主要由四个重要角色组成:
1.ResourceManager(资源管理器RM)常驻守护进程:
管理集群资源,负责全局资源的监控、分配和管理;
接收来自nodemanager的心跳信息,进行整体资源的汇总;
监控Applicacation Master的开启和创建;
2.Nodemanager(节点管理器NM)常驻守护进程:
yarn中的每一台节点服务器都运行一个nodemanager,Nodemanager相当于管理当前机器的一个代理;
负责本台机器的程序运行,并且对本台机器资源进行管理和监控;
Nodemanager定时向ResourceManager汇报本节点的资源(cpu、内存)使用情况;
启动并监控Container(容器);
3.Applicacation Master(应用节点)守护进程:
用户提交一个应用将会产生相对应的Applicacation Master(AM),AM常驻在 Nodemanager上;
每个AM都需要与Nodemanager进行资源协商,将获取所需的资源(Container)用于任务(Task)的运行
监控任务(Task)的运行情况;
如果Task运行失败,它将负责为其重新申请资源和启动任务;
4.Container:
容器是资源调度的单位,它是内存、cpu、磁盘、和IO的集合。Application Master会给task分配Container,task只能只用分配给它的Container的资源。分配流程为Resource Manager ->Application Master -> task
Yarn调度的步骤
1.有YarnClient提交program信息打拼ResourceManager,包括(应用代码和应用需要的一切参数和环境信息)
2.ResourceManager收到请求之后,调用ApplicationMasterManager向NodeManager发送请求,申请一个资源(Container),并且要求Container启动ApplicationMaster.
3.ApplicationMaster启动之后,首先注册自己到ResourceManager,然后为自己的Task申请Container,这个过程是轮训的,循环申请资源,ResourceManager收到请求之后,会要求NodeManager分配资源
4.资源分配完毕之后,Application Master发送请求到NodeManager,启动任务。
5.NodeManager设置Container的运行时环境(jar包,环境变量,任务启动脚本),NodeManager会通过脚本启动任务
6.启动的过程是由NodeManager的ContainerLauncher负责的,ContainerLauncher完成启动任务的工作
7.这一步是在作业执行过程中持续发生的,我用虚线代表,主要包括两类交互,第一,task和Application Master的交互,task会向AM汇报任务状态和进度信息,比如任务启动,停止,状态更新。Applicaiton Master利用这些信息监控task整个执行过程。第二,是NodeManager和ResourceManager的交互,这个过程和任务没有关系,主要是两者之间保持的心跳信息(状态的变化等等)
8.Application Master在检测到作业运行完毕之后,Application Master想Resource Manager 删除自己,并且停止自己执行。