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

我在想,这可以实现的另一种方式是使用Hadoop类之一,该类返回文件系统中目录的大小,例如org.apache.hadoop.fs.FileSystem列出特定HDFS路径下的文件。

有什么建议么 ?

最佳答案

我用它来对区域进行托管拆分,但是,您可以利用它自己来实现负载均衡。我还对自己进行负载平衡,以将(给定表的)区域均匀地分布在我们的节点上,从而使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
  }
}

关于hadoop - 通过API获取Hbase区域大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14573466/

10-16 05:29