如何获得Java中Hbase表的HFile的数量? [英] How do I get the number of HFiles of a Hbase table in Java?

查看:295
本文介绍了如何获得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的数量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆