概要:
yarn 是Hadoop2.x 运算引擎,她不仅仅可以运行MapReduce,还可以运行DAG(storm应用),hive,hbase,pig,spark等应用,yarn的设计目的是能够使各种应用运行在Hadoop之上,并且通过yarn从系统层面进行统一的管理,各个应用互不干扰,共享整个集群的资源.
yarn的设计思想是把 资源管理,任务调度/监控独立出来,成为单独的守护进程,
yarn的组成
ResourceManager: 包括 App Manager(应用管理器) 和 Resource Scheduler(调度器)
AppManager: 应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动AppMaster、监控AppMaster运行状态并在失败时重新启动它等。
ResourceScheduler :调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。
NodeManager: 包括 AppMaster, Container,NodeManager是每个节点上的资源和任务管理器,一方面,它会定时地向ResourceManager汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AppManager的Container启动/停止等各种请求。
Container:是每个节点上的资源抽象,封装了每个节点上的资源
AppMaster:是client提交的应用,每个应用对应一个 AppMaster,一个NodeManager上可以 有多个 AppMaster,AppMaster与对应的每个NodeManager节点上的Container进行通信监控任 务执行状态,并且汇报给ResourceManager的App Manager,
yarn 原理图
(这里盗用官网的一张图)
简述yarn运行原理
- 用户client 向ResourceManager 提交应用
- ResourceManager 为应用程序分配第一个container,并且和响应的NodeManager通信,请求在这这个container中为应用启动一个AppMaster
- 这个AppMaster首先向ResourceManager注册自己,为了让client能够通过AppManager监控到任务的状态,并且ResourceManager会为这个AppMaster分配 container,这些container在不同的NodeManger中,
- AppMaster申请到资源(container)之后,就会与响应的NodeManger进行通讯,并且启动任务
- 各个任务通过 RPC(远程调用协议)向AppMaster汇报自己的状态和进度,
- 应用运行完毕之后,AppMaster向AppManager汇报完毕,并且注销关闭自己.
(注意: mapreduce应用会在执行完毕之后关闭注销,但是 storm的topology任务除非手动kill否则永远执行)