1.YARN HA架构图

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1025762/1607520720373-0f7be121-25b0-4e5d-a0dd-eb551281c9e8.png#align=left&display=inline&height=364&margin=%5Bobject%20Object%5D&originHeight=364&originWidth=553&size=0&status=done&style=none&width=553)![image.gif](https://cdn.nlark.com/yuque/0/2020/gif/1025762/1607520720196-3c82289e-d608-4785-b43b-52037605993d.gif#align=left&display=inline&height=1&margin=%5Bobject%20Object%5D&name=image.gif&originHeight=1&originWidth=1&size=43&status=done&style=none&width=1)

注意:0.客户端还是通过namenode去寻找能进行访问的active节点,图中暂时未画
   1.这里是zkfc是 RM中的线程
   2.RM是通过ZK来共享数据,默认目录 /rmstore #配置:yarn.resourcemanager.zk-state-store.parent-path =/rmstore
   3.NM 只会向 RM Active节点汇报信息
   4.YARN HA架构设计明显没有HDFS HA 那么严格。Hdfs 读写不能丢数据,但是任务可以挂,挂了重启就可以了。

2.YARN HA架构剖析

ZKFC: 线程,只作为RM进程的一个线程而非独立的进程存在
RMStateStore: 存储在zk的/rmstore目录下。
      1.activeRM会向这个目录写APP信息
      2.当activeRM挂了,另外一个standby RM通过ZKFC选举成功为active,会从/rmstore读取相应的作业信息。重新构建作业的内存信息,启动内部的服务,开始接收NM的心跳,构建集群的资源信息,并且接收客户端的作业提交请求。
RM: 不同于NN一个写一个读,它是一个写,挂了后,stand by才会从zk 读取app信息
   1.启动时候会向ZK的/rmstore目录写lock文件,写成功就为active,否则standby.rm节点zkfc会一直监控这个lock文件是否存在,假如不存在,就为active,否则 为standby.
   2.接收client的请求,接收和监控NM的资源状况的汇报,负载资源的分配和调度。
   3.启动和监控APPMASTER on NM节点的container。
   #applicationsmanager 在RM中 、applicationmaster是DN的container容器里 作业的主程序
NM:节点资源的管理 ,启动容器运行task计算,上报资源