我正在尝试为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)
| 归档时间: |
|
| 查看次数: |
3632 次 |
| 最近记录: |