用HBaseAdmin的同学要小心--记一次HBase RegionServer的退出
一大早过来,有RegionServer挂了。
查看log,显示
2011-09-25 22:31:51,185 [main-SendThread(XXX:2181)] INFO org.apache.zookeeper.ClientCnxn: Unable to read additional data from server sessionid 0x30694969fba6a9, likely server has closed socket, closing socket connection and attempting reconnect
netstat -anp|grep 2181
try {HBaseAdmin.checkHBaseAvailable(hbaseConfig);} catch (MasterNotRunningException e) {logger.error(e.getMessage(),e);return new GangliaData("HBase Cluster Availability", e.getMessage() , 0);} catch (ZooKeeperConnectionException e) {logger.error(e.getMessage(),e);return new GangliaData("HBase Cluster Availability", e.getMessage() , 0);} public static void checkHBaseAvailable(Configuration conf) throws MasterNotRunningException, ZooKeeperConnectionException { Configuration copyOfConf = HBaseConfiguration.create(conf); copyOfConf.setInt("hbase.client.retries.number", 1); new HBaseAdmin(copyOfConf); } public HBaseAdmin(Configuration c) throws MasterNotRunningException, ZooKeeperConnectionException { this.conf = HBaseConfiguration.create(c); this.connection = HConnectionManager.getConnection(this.conf); this.pause = this.conf.getLong("hbase.client.pause", 1000); this.numRetries = this.conf.getInt("hbase.client.retries.number", 10); this.retryLongerMultiplier = this.conf.getInt("hbase.client.retries.longer.multiplier", 10); this.connection.getMaster(); }Index: src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java===================================================================--- src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java(revision 1171389)+++ src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java(working copy)@@ -1254,6 +1254,7 @@ throws MasterNotRunningException, ZooKeeperConnectionException { Configuration copyOfConf = HBaseConfiguration.create(conf); copyOfConf.setInt("hbase.client.retries.number", 1);- new HBaseAdmin(copyOfConf);+ HBaseAdmin admin = new HBaseAdmin(copyOfConf);+ HConnectionManager.deleteConnection(admin.getConfiguration(), false); } }