当resourcemanager ha发生切换的瞬间,hadoop集群还没有获取到任何nodemanager心跳,此时resourcemanager响应给am的nodemanager数量为0, 而currentBlacklistedYarnNodes也恰好为0,currentBlacklistedYarnNodes.size >= numClusterNodes条件成立,isAllNodeBlacklisted为true,导致am抛出异常,实时作业退出。
在Hadoop集群中,ResourceManager是整个集群的资源管理器,它负责为任务分配资源。当ResourceManager高可用性(HA)切换时,意味着原来的ResourceManager不再负责资源管理,而新的ResourceManager会接管这项工作。在这个切换瞬间,Hadoop集群还没有接收到任何NodeManager的心跳,也就是还没有得到关于集群中哪些节点可以被使用的信息。因此,新的ResourceManager会向运行作业的Application Master返回0个NodeManager可用。同时,currentBlacklistedYarnNodes列表也恰好为空,这意味着没有任何节点被标记为不可用。但是会发现currentBlacklistedYarnNodes列表的大小大于等于集群中节点数量(numClusterNodes),这意味着所有节点都被标记为不可用。这就导致了isAllNodeBlacklisted的值为true,表示所有节点都被标记为不可用。这种情况下,Application Master会抛出异常,并且实时作业会退出,因为没有可用的节点为其提供资源。