读书人

hbase中对deadserver处置的困扰

发布时间: 2012-09-08 10:48:07 作者: rapoo

hbase中对deadserver处理的困扰
hbase在一个regionServer死掉后,即使重启了这个server,deadlist中也不会去掉原先死去的deadserver。
例如:

hbase shell>status5 servers, 0 dead, 6.2000 average load

停掉其中一个节点
hbase-daemon.sh stop regionserver

然后
hbase shell>status4 servers, 1 dead, 6.2000 average load

再立即重启该节点:
hbase-daemon.sh start regionserver

此时回到shell中
hbase shell>status5 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了

读书人网 >互联网

热点推荐