通过api获取hbase区域大小

vlju58qv  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(346)

我正在尝试为hbase编写一个均衡器工具,它可以通过区域计数和/或区域大小(存储文件大小的总和)在区域服务器之间为表平衡区域。我找不到任何返回区域大小或相关信息的hbase api类。我已经检查了一些可用于获取其他表/区域信息的类,例如org.apache.hadoop.hbase.client.htable和hbaseadmin。
我在想,实现这一点的另一种方法是使用一个hadoop类,它返回文件系统中目录的大小,例如org.apache.hadoop.fs.filesystem列出特定hdfs路径下的文件。
有什么建议吗?

kxeu7u2r

kxeu7u2r1#

我使用它来管理区域的拆分,但是,您可以自己利用它来实现负载平衡。我还自己进行了负载平衡,将区域(给定表的)均匀地分布在节点上,这样mr jobs就可以均匀地分布。
也许下面的代码片段有用?

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
  }
}
oknwwptz

oknwwptz2#

默认的负载平衡器有什么问题?
从wiki:
均衡器是在主服务器上运行的一种周期性操作,用于在集群上重新分配区域。它是通过 hbase.balancer.period 默认值为300000(5分钟)。
如果你真的想自己动手,你确实可以使用hadoopapi,更具体地说,是 FileStatus 班级。这个类充当一个接口来表示文件的客户端信息。

相关问题