hbase在一个regionServer死掉后,即使重启了这个server,deadlist中也不会去掉原先死去的deadserver。
例如:
停掉其中一个节点
然后
再立即重启该节点:
此时回到shell中
根本原因是在ServerManager中处理时只有add而没有remove,当然deadlist值有一个上限由hbase.master.maxdeadservers决定,默认为100:
这一点会对用户造成很大的困扰,因此前几天诞生了这个patch,预期在0.90.2中加上
https://issues.apache.org/jira/browse/HBASE-3580
注:这个patch没赶上0.90.2,己延期到0.90.3了
例如:
hbase shell
>status
5 servers, 0 dead, 6.2000 average load
停掉其中一个节点
hbase-daemon.sh stop regionserver
然后
hbase shell
>status
4 servers, 1 dead, 6.2000 average load
再立即重启该节点:
hbase-daemon.sh start regionserver
此时回到shell中
hbase shell
>status
5 servers, 1 dead, 6.2000 average load
根本原因是在ServerManager中处理时只有add而没有remove,当然deadlist值有一个上限由hbase.master.maxdeadservers决定,默认为100:
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);
}
这一点会对用户造成很大的困扰,因此前几天诞生了这个patch,预期在0.90.2中加上
https://issues.apache.org/jira/browse/HBASE-3580
注:这个patch没赶上0.90.2,己延期到0.90.3了