hadoop-yarn的主节点resourceManager相当于yarn集群的中央管理器,负责整个集群资源的调度分配工作。那么当主节点down机期间,已发布的应用以及从节点nodeManager是否还可有条不紊的继续工作呢?resourceManager挂掉,又重启后,整个yarn集群又会发生什么样的变化。
http://hadoop.apache.org/docs/stable2/hadoop-yarn/hadoop-yarn-site/ResourceManagerRestart.html
官方文档对于主节点resourcemanager挂掉后,工作恢复的流程分为两个阶段。
阶段一:
对于早期hadoop-2.4.0版本的yarn,主节点挂掉后,从节点和已发布应用均可正常工作。通过hdfs或zk可实现主节点的状态保存,当主节点重启后,会尝试从hdfs或zk上获取之前保存的集群信息,然后进行恢复。不过有一点比较坑爹的是,主节点重启后会像nodeManager和已发布应用也即appMaster发送一条re-sync命令,nodeManager接受到这个命令后会杀死由本身启动的所有container,appMaster接受到这条命令后会结束自身进程,rm收集完状态信息后会重启appMaster。
阶段二:
之后的yarn在此做了优化,rm重启后,不会要求kill掉appMaster,nm收到rm发送的re-sync命令后也不会kill掉已经启动的container。
笔者使用hdfs来保存rm运行时状态用于重启恢复
实验:
将运行中的yarn集群主节点down掉,查看后台nm日志输出
nm在不断的做与rm的重连操作。这时我们将主节点重启,整个集群没有收到任何影响。也就是说yarn主节点短时间挂掉对应用用户是透明无影响的。随机重启即可。
但是,如果时间长不重启rm,nm会停止,随即appMaster也会停止。
这个时间限制可通过设置 yarn.resourcemanager.connect.max-wait.ms 来控制。
如果希望nm不断尝试连接rm,可以将这个值设置为-1.这样就是rm挂掉后,不会对集群和已发布应用产生任何影响,发现不可调度新任务时,重启即可。