hbase的admin可用api汇总

来源:互联网 发布:淘宝便宜有趣的小玩意 编辑:程序博客网 时间:2024/06/07 23:15

hbase的admin接口提供了一系列可以获得集群访问状态的api,如果是做hbase的集群监控系统,通过这些api或许可以帮你获得关于当前集群访问情况的数据,并简单介绍这些api返回的信息和一些使用姿势。

admin.listTableNames():返回集群的table列表

admin.getClusterStatus():返回一个ClusterStatus类,该类描述了集群整体的一些状态,部分有用的状态列出如下:

regionserver的数量:clusterStatus.getServerSize();

regionserver的列表:clusterStatus.getServers(),返回类型:List<ServerName>

挂掉的regionserver数量:clusterStatus.getDeadServers();

挂掉的regionserver名字:clusterStatus.getDeadSErverNames(),返回类型:ServerName

region的数量:clusterStatus.getRegionsCount();

平均负载:clusterStatus.getAverageLoad();

已知regionserver的名字,可以获取regionserver上的负载信息,具体方法如下:

ServerLoad serverload = clusterStatus.getLoad(serverName);

serveLoad中维护了关于当前regonserver的一些负载信息,常用的如下:

读请求计数:serverLoad.getReadRequestsCount();

写请求计数:serverLoad.getWriteRequestsCount();

每秒请求数:serverLoad.getRequestsPerSecond();

关键是从serverLoad中可以获得regionload列表,如下一段代码演示了如何获取regionload列表并按region名称归类

ClusterStatus clusterStatus = admin.getClusterStatus();for(ServerName serverName : clusterStatus.getServers()) {     ServerLoad serverLoad = clusterStatus.getLoad(serverName);     for(Map.Entry<byte[], RegionLoad> regionload : serverLoad.getRegionsLoad().entrySet()) {            String regionName = Bytes.toString(regionload.getKey());            result.put(regionName, regionload.getValue());     }}

regionLoad与serverLoad类似,维护了region的一些负载信息,常用如下:

读请求计数:regionLoad.getReadRequestsCount();

写请求计数:regionLoad.getWriteRequestsCount();

regon名称:regionLoad.getNameAsString();

请求总计数:regionLoad.getRequestsCount();

该region所属的table名:regionLoad.getNameAsString().split(",")[0]

以下一段代码演示了依据表名获取归属该表的region,并将这些region按照regionserver进行归类:

Map<String, List<String>> result = new HashMap<>();try {     ClusterStatus clusterStatus = admin.getClusterStatus();     for(ServerName serverName : serverNames) {         List<String> regions = new ArrayList<>();         ServerLoad serverLoad = clusterStatus.getLoad(serverName);         Map<byte[], RegionLoad> regionLoads = serverLoad.getRegionsLoad();         for(Map.Entry<byte[], RegionLoad> entry : regionLoads.entrySet()) {            String uniqueName = new String(entry.getKey()).split(",")[0];   //该region所属的table名;            if (uniqueName.equals(tableName)) {                regions.add(new String(entry.getKey()));            }         }         result.put(serverName.getServerName(), regions);      }} finally {      if(admin != null) {admin.close();}}

通过上面这段代码,可以看出如何综合地使用clusterStatus,ServerLoad和RegionLoad。


0 0