Получить размер области Hbase через API

Я пытаюсь написать инструмент балансировки для Hbase, который мог бы балансировать регионы через regionServers для таблицы по региону и/или размеру региона (сумма размеров storeFile). Я не мог найти ни одного класса API Hbase, который возвращает размер регионов или соответствующую информацию. Я уже проверил несколько классов, которые могут быть использованы для получения другой информации о таблице/регионе, например. org.apache.hadoop.hbase.client.HTable и HBaseAdmin.

Я думаю, что это может быть реализовано с помощью одного из классов Hadoop, который возвращает размер каталогов в файловой системе, например. org.apache.hadoop.fs.FileSystem перечисляет файлы под определенным HDFS-контуром.

Какие-либо предложения ?

2
nl ja de

2 ответы

Я использую это для управления разделенными областями, но вы можете использовать его для балансировки нагрузки самостоятельно. Я также балансирую нагрузку, чтобы равномерно распределять регионы (данной таблицы) через наши узлы, чтобы задания MR равномерно распределялись.

Возможно, приведенный ниже фрагмент кода полезен?

final HBaseAdmin admin = new HBaseAdmin(conf);
final ClusterStatus clusterStatus = admin.getClusterStatus();

for (ServerName serverName : clusterStatus.getServers()) {
  final HServerLoad serverLoad = clusterStatus.getLoad(serverName);

  for (Map.Entry entry : serverLoad.getRegionsLoad().entrySet()) {
    final String region = Bytes.toString(entry.getKey());
    final HServerLoad.RegionLoad regionLoad = entry.getValue();
    long storeFileSize = regionLoad.getStorefileSizeMB();
   //other useful thing in regionLoad if you like
  }
}
7
добавлено
hi @IvanBalashov Мне интересно, смогли ли вы пройти через это, чтобы получить размер областей таблицы hbase через api? У меня такая же ситуация, и api - это лабиринт прямо сейчас.
добавлено автор Nikhil Mulley, источник
Да. похоже, api доступен для hbase, но 0.96/0.98 как часть HBaseAdmin, и я использую 0.94, поэтому я застрял до обновления. Кроме того, показатели, доступные в доступной версии 0.96, позволяют мне запросить систему показателей и проверить регионы, так что это другой подход вместо api.
добавлено автор Nikhil Mulley, источник
Дэвид, какие-либо советы о том, как получить объект RegionLoad (или, что то другое, что он сказал), уже знают HRegionInfo? Я разрушаю свои мозги, пытаясь выяснить это, казалось бы, прямое соединение через hbase api ...
добавлено автор Ivan Balashov, источник
@NikhilMulley Nope, извините. Но удачи вам! С HBase вам это понадобится! ;)
добавлено автор Ivan Balashov, источник
именно то, что я искал, спасибо user698197
добавлено автор sulabhc, источник
ha ... Полагаю, я должен изменить свое отображаемое имя - спасибо, что указали это :)
добавлено автор David Pinto, источник

Что случилось с параметром Load Balancer ?

Из Вики:

Балансир - это периодическая операция, которая запускается на сервере для перераспределения областей в кластере. Он настраивается с помощью hbase.balancer.period и по умолчанию 300000 (5 минут).

Если вы действительно хотите это сделать, вы действительно можете использовать API Hadoop и более конкретно, класс FileStatus . Этот класс действует как интерфейс для представления информации о стороне клиента для файла.

0
добавлено
фактически loadBalancer Hbase рассматривает всю таблицу для балансировки, но я хочу балансировать регионы по отдельной таблице.
добавлено автор sulabhc, источник
Тогда вам может быть интересно: issues.apache.org/jira/browse/HBASE- 3373
добавлено автор Pieterjan, источник