hbase中对deadserver处理的问题

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);  

}  

 

 

 

你可能感兴趣的:(分布式)