我正在尝试为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/