java - 获取 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连接。所以读取元数据非常非常慢。
有没有其他方法可以完成相同的任务?
解决方案
推荐阅读
- python - python如何用列表压缩列表列表
- c# - 提高 ASP.NET [核心] 系统中的瓶颈性能
- google-bigquery - 如何获取 ValueProvider 的值并将其写入 BigQuery 表?
- express - 使用 IIS 托管 express node.js 后端
- android - 将在不支持的设备上安装 ARCore android 应用
- python - 无法通过 python 中的 fbchat 登录 FB [2FA 未启用]
- qt - QML:Flickable 的接受按钮
- kubernetes - k8s:为什么 coredns 不能在主节点上运行?
- swift - 快速更改键盘建议栏文本
- r - 是否有用于在渐变色散点图上绘制线性回归的 R 库