Yarn(yet another resource negotiator)是分布式调度引擎,Hadoop2加进来的,算是抽象出来的。主要是监管节点上使用多少内存和CPU,然后把任务分配到空闲的节点,Yarn只做调度,不做计算。不光MapReduce可以使用Yarn,例如Spark,Storm,Tez,Mpi等很多也可以用于Yarn上。
组件
ResourceManager:资源管理者,一般和NameNode放在一个节点。也可以单独放一个机器上(生产环境中一般是分开机器上,两个都比较耗内存)。RM也可以启用多个(像NameNode一样),但不需要HA(数据不会出问题,重启即可)。
NodeManager:节点管理者,一般放在DataNode的节点上。也可以放在其他节点上。最好一个DataNode和一个NodeManager在一个节点(或比较近,如放一个机架上,网络最近,此处有个疑问,NodeManager执行时需要的数据可能会在其他DataNode呀),这样管理和调度最快,不需要网络传输。NodeManager执行具体计算任务。NodeManager宕机后,ResourceManager会重新计算该任务(需要核实)。
作业流程
客户端提交一个应用后,ResourceManager选择一个NodeManager,并在该NM上为该RM分配一个Container,在该Container中启动一个应用程序AM(进程),AM首先初始化。
AM负责管理整个应用的声明周期。AM向RM注册,用户可以直接通过RM查看应用程序的运行状态。AM采用轮询的方式通过RPC协议为各个任务申请资源(申请多个Container然后分配任务),并监控它们的运行状态直到运行结束。 在这过程中AM向ResourceManager报告心跳。运行结束后向RM申请注销Container和关闭自己。
Container是资源,包括cpu和内存等资源。一个NodeManager可能有多个Container。