для требований проекта мне нужно извлечь метаданные 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 для каждой таблицы.
Таким образом, чтение метаданных идет очень медленно.
Есть ли другой способ выполнить ту же задачу?