获取HBase的所有区域,避免Zookeeper客户端重新连接

时间:2018-11-07 23:16:53

标签: java hadoop hbase apache-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连接。 因此,读取元数据非常慢。

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

0 个答案:

没有答案