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