首页 > 解决方案 > 获取 HBase 的所有区域,避免 Zookeeper 客户端重新连接

问题描述

对于项目要求,我需要为所有区域提取 HBase 元数据。正是对于每个地区,我需要这些字段:

所以我想出了这个解决方案:

List<HTableDescriptor> hTableDescriptors = Arrays.asList(admin.listTables());
        for (HTableDescriptor hTableDescriptor : hTableDescriptors) {
            TableName name = hTableDescriptor.getTableName();
            List<HRegionInfo> tableRegions = admin.getTableRegions(name);
            LOG.info("Found {} regions",tableRegions.size());
            for (HRegionInfo region : tableRegions) {
                RegionDetailInfo detailInfo = new RegionDetailInfo();
                detailInfo.setSchemaName(name.getNamespaceAsString());
                detailInfo.setTableName(name.getNameAsString());
                detailInfo.setEncodeName(region.getEncodedName());
            detailInfo.setStartKey(Bytes.toString(region.getStartKey()));
                    detailInfo.setEndKey(Bytes.toString(region.getEndKey()));
/* other stuff */
                }
            }

这里的问题在于语句:admin.getTableRegions(name); 需要为每个表建立一个zookeeper连接。所以读取元数据非常非常慢。

有没有其他方法可以完成相同的任务?

标签: javahadoophbaseapache-zookeeper

解决方案


推荐阅读