同样开篇介绍之前,先让我们回顾一下在伪分布式架构下的Yarn是怎么样的。一样的主从结构,两个进程RM和NM。ResourceManager和NodeManager,其中ResourceManager里还有两个部分:ApplicationsManager和ResourceSchedule,前者负责监控在NM上的所有ApplicationMaster的情况,后者主要监控所有NM的资源情况。在NodeManager里面都是一下container,装载这ApplicationMaster或者一些task,而每个job都有一个ApplicationMaster与之对应用于管理整个job的运行计算。
其实Yarn的架构和HDFS的架构是一样的,就是这里没有JN这个进程,取而代之的是一个叫RMStateStore的东西,以及ZKFC不再是一个独立的守护进程了,而是RM进程里的一个线程了。另外,NM不再是想所有的RM进行rpc通信,NM只和active的RM进行通信进行信息汇报。
下面我们详细介绍一下各个进程的功能:
RMStateStore:
1,RM把job的信息存储在ZK的/rmstore下,activeRM会向这个目录里写入app的信息。2,当我们的activeRM挂了后,standbyRM经过ZK选举后成为了activeRM后会从这个目录里读取app的信息,重新构建各个job的资源与情况信息。然后,新的activeRM会重启ApplicationsManager和ResourceScheduler。
RM:
1,启动的时候会向ZK的目录里写入一个lock文件,写入成功者将会是active状态,否则是standby状态。同时,standbyRM会一直监控这个lock文件是否存在(估计activeRM是定期向ZK写入lock文件的,如果突然没写入就意味这个RM节点挂掉了,这个时候standbyRM就马上写入自己的lock文件吧) 2,接受client的request,接收和监控NM的资源情况。3,启动和监控ApplicationMaster。
NM:
和伪分布式的功能基本相同,只是不会向standbyRM进行rpc通信汇报信息而已。
根据官网的接收,包括client,ApplicationMaster和NodeManager都会以轮询的方式来尝试连接到真正的activeRM的,这就是为什么NM是不需要向standbyNM进行通信,因为当这三者原本连接的activeRM挂掉了,它们将有开始尝试连接别的RM了,知道找到activeRM。
这个是Yarn的架构图,可以将它和HDFS的架构图进行对比
|
|