本文介绍了如何获得Java中Hbase表的HFile的数量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个HBase表。我对桌子执行了HBase主要压缩。如何在Java中为Hbase表动态获取HFile的数量?
解决方案
Kylin - 你可以从一个RegionLoad实例中获得商店文件的数量,例如int storeFiles = regionLoad.getStorefiles()
/ * *单元测试的构造函数* /
HBaseRegionSizeCalculator(HTable表,HBaseAdmin hBaseAdmin)抛出IOException {
try {
if(!enabled(table.getConfiguration())){
logger.info(区域大小计算已禁用);
return;
logger.info(计算表的区域大小\+ new String(table.getTableName())+\。);
//获取表格的区域。
设置< HRegionInfo> tableRegionInfos = table.getRegionLocations()。keySet();
Set< byte []> tableRegions = new TreeSet< byte []>(Bytes.BYTES_COMPARATOR); (HRegionInfo regionInfo:tableRegionInfos){
tableRegions.add(regionInfo.getRegionName());
}
ClusterStatus clusterStatus = hBaseAdmin.getClusterStatus();
集合< ServerName> servers = clusterStatus.getServers();
最终长megaByte = 1024L * 1024L;
//遍历所有簇区域,过滤来自表格的区域和
//计算它们的大小。 (ServerName serverName:servers)
{
ServerLoad serverLoad = clusterStatus.getLoad(serverName);
(RegionLoad regionLoad:serverLoad.getRegionsLoad()。values()){
byte [] regionId = regionLoad.getName();
if(tableRegions.contains(regionId)){
long regionSizeBytes = regionLoad.getStorefileSizeMB()* megaByte;
sizeMap.put(regionId,regionSizeBytes);
// logger.info(Region+ regionLoad.getNameAsString()
// +has size+ regionSizeBytes);
}
}
}
}最后{
hBaseAdmin.close();
}
}
I have a HBase table. I executed HBase major compaction for the table.How do I get the number of HFiles dynamically for the Hbase table in Java?
解决方案
Found this code sample in Kylin - you can get the number of store files from a RegionLoad instance, i.e. int storeFiles = regionLoad.getStorefiles()
/** Constructor for unit testing */
HBaseRegionSizeCalculator(HTable table, HBaseAdmin hBaseAdmin) throws IOException {
try {
if (!enabled(table.getConfiguration())) {
logger.info("Region size calculation disabled.");
return;
}
logger.info("Calculating region sizes for table \"" + new String(table.getTableName()) + "\".");
// Get regions for table.
Set<HRegionInfo> tableRegionInfos = table.getRegionLocations().keySet();
Set<byte[]> tableRegions = new TreeSet<byte[]>(Bytes.BYTES_COMPARATOR);
for (HRegionInfo regionInfo : tableRegionInfos) {
tableRegions.add(regionInfo.getRegionName());
}
ClusterStatus clusterStatus = hBaseAdmin.getClusterStatus();
Collection<ServerName> servers = clusterStatus.getServers();
final long megaByte = 1024L * 1024L;
// Iterate all cluster regions, filter regions from our table and
// compute their size.
for (ServerName serverName : servers) {
ServerLoad serverLoad = clusterStatus.getLoad(serverName);
for (RegionLoad regionLoad : serverLoad.getRegionsLoad().values()) {
byte[] regionId = regionLoad.getName();
if (tableRegions.contains(regionId)) {
long regionSizeBytes = regionLoad.getStorefileSizeMB() * megaByte;
sizeMap.put(regionId, regionSizeBytes);
// logger.info("Region " + regionLoad.getNameAsString()
// + " has size " + regionSizeBytes);
}
}
}
} finally {
hBaseAdmin.close();
}
}
这篇关于如何获得Java中Hbase表的HFile的数量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!