hbase在一个regionServer死掉后,即使重启了这个server,deadlist中也不会去掉原先死去的deadserver。

例如:

Java代码

hbase shell  

status

5 servers, 0 dead, 6.2000 average load  

停掉其中一个节点

Java代码

hbase-daemon.sh stop regionserver  

然后

Java代码

hbase shell  

status

4 servers, 1 dead, 6.2000 average load  

再立即重启该节点:

Java代码

hbase-daemon.sh start regionserver  

此时回到shell中

Java代码

hbase shell  

status

5 servers, 1 dead, 6.2000 average load  

根本原因是在ServerManager中处理时只有add而没有remove,当然deadlist值有一个上限由hbase.master.maxdeadservers决定,默认为100:

Java代码

public synchronized boolean add(String e) {  

  this.numProcessing++;  

  // Check to see if we are at capacity for dead servers  

  if (deadServerList.size() == this.maxDeadServers) {  

    deadServers.remove(deadServerList.remove(0));  

  }  

  deadServerList.add(e);  

  return deadServers.add(e);  

}  
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐