通过API获取Hbase区域大小

sul*_*bhc 2 hadoop hbase

我正在尝试为Hbase编写一个平衡器工具,它可以通过区域计数和/或区域大小(storeFile大小的总和)来平衡regionServers上的区域.我找不到任何返回区域大小或相关信息的Hbase API类.我已经检查了一些可用于获取其他表/区域信息的类,例如org.apache.hadoop.hbase.client.HTable和HBaseAdmin.

我在想,另一种可以实现的方法是使用一个Hadoop类来返回fileSystem中目录的大小,例如org.apache.hadoop.fs.FileSystem列出特定HDFS路径下的文件.

有什么建议 ?

小智 7

我使用它来进行区域的托管拆分,但是,您可以利用它来自行进行负载平衡.我还对自己进行负载平衡,以便在我们的节点之间均匀地分布(给定表的)区域,以便MR作业均匀分布.

也许下面的代码片段很有用?

final HBaseAdmin admin = new HBaseAdmin(conf);
final ClusterStatus clusterStatus = admin.getClusterStatus();

for (ServerName serverName : clusterStatus.getServers()) {
  final HServerLoad serverLoad = clusterStatus.getLoad(serverName);

  for (Map.Entry<byte[], HServerLoad.RegionLoad> entry : serverLoad.getRegionsLoad().entrySet()) {
    final String region = Bytes.toString(entry.getKey());
    final HServerLoad.RegionLoad regionLoad = entry.getValue();
    long storeFileSize = regionLoad.getStorefileSizeMB();
    // other useful thing in regionLoad if you like
  }
}
Run Code Online (Sandbox Code Playgroud)