Yarn也是主从结构,主要由ResourceManager、NodeManager、 ApplicationMaster和Container等几个组件构成。
一、ResourceManager 是根据任务的需要对集群资源的需求进行调度的 YARN 集群主控节点,负责协调和管理整个集群(所有 NodeManager)的资源。二、NodeManager 是 YARN 集群当中真正资源的提供者,是真正执行应用程序的容器的提供者, 监控应用程序的资源使用情况(CPU,内存,硬盘,网络),并通过心跳向集群资源调度器 ResourceManager 进行汇报以更新自己的健康状态。同时其也会监督 Container 的生命周期管理,监控每个 Container的资源使用(内存、CPU 等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。三、ApplicationMaster 对应一个应用程序,职责是:向资源调度器申请执行任务的资源容器,运行任务,监控整个任务的执行,跟踪整个任务的状态,处理任务失败以异常情况。四、Container 容器是一个抽象出来的逻辑资源单位。容器是由 ResourceManager Scheduler 服务动态分配的资源构成,它包括了该节点上的一定量 CPU,内存,磁盘,网络等信息,MapReduce 程序的所有 Task 都是在一个容器里执行完成的,容器的大小是可以动态调整的。Container是Yarn对计算机计算资源的抽象,它其实就是一组CPU和内存资源,所有的应用都会运行在Container中。
关于Yarn的资源调度流程
客户端先通过RPC请求RM(ResourceManager)资源,ResourceManager返回一个jobid,并告知一个提交程序相关文件的路径。客户端会将相关的文件(.jar、.split、.xml)提交到HDFS的该路径下。并告知ResourceManager提交完毕。ResourceManager中有一个任务队列,会将RPC请求资源的信息封装到一个任务对象中。ResourceManager将任务对象分配给指定的nodemanager。nodemanager根据应用程序资源信息,创建一个container,并将HDFS中的文件信息放到其目录中。客户端发送启动程序的shell脚本命令,会先启动AppMaster,AppMaster向ResourceManager进行注册,这样用户可以直接通过RM査看应用程序的运行状态。然后AppMaster根据应用程序的任务需求资源在NodeManager上创建Container,AppMaster将相关的任务发送给这些NodeManager,利用创建出来的 Container去执行任务。