Hbase-Regionsgröße über API abrufen

Ich versuche, ein Balancertool für Hbase zu schreiben, das Regionen über regionServers für eine Tabelle nach Regionenanzahl und/oder Regionsgröße (Summe der storeFile-Größen) ausgleichen kann. Ich konnte keine Hbase-API-Klasse finden, die die Regionsgröße oder zugehörige Informationen zurückgibt. Ich habe bereits einige der Klassen überprüft, die verwendet werden könnten, um andere Tabellen-/Regionsinformationen zu erhalten, z. org.apache.hadoop.hbase.client.HTable und HBaseAdmin.

Ich denke, eine andere Möglichkeit, dies zu implementieren, ist die Verwendung einer der Hadoop-Klassen, die die Größe der Verzeichnisse im Dateisystem zurückgibt, z. org.apache.hadoop.fs.FileSystem listet die Dateien unter einem bestimmten HDFS-Pfad auf.

Irgendwelche Vorschläge ?

2
nl ja ru

2 Antworten

Ich benutze dies, um verwaltete Regionen zu verwalten, aber Sie können es auch nutzen, um Ihr Konto selbst zu verteilen. Ich balanciere mich auch selbst aus, um die Regionen (einer gegebenen Tabelle) gleichmäßig über unsere Knoten zu verteilen, so dass MR-Jobs gleichmäßig verteilt werden.

Vielleicht ist das Code-Snippet nützlich?

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
hinzugefügt
hi @IvanBalashov Ich frage mich, waren Sie in der Lage, durch diese zu bekommen, um die Größe der Regionen einer HBase-Tabelle über API zu bekommen? Ich habe eine ähnliche Situation und api ist jetzt ein Labyrinth.
hinzugefügt der Autor Nikhil Mulley, Quelle
Ja. es scheint eine api für hbase aber 0.96/0.98 als Teil von HBaseAdmin zu sein und ich benutze 0.94, so dass ich bis zum Upgrade stecken bleibe. Auch die Metriken, die in 0.96 zur Verfügung stehen, machen es mir leicht, das Metrikensystem abzufragen und die Regionsgröße zu überprüfen, also ist das ein anderer Ansatz anstelle von api.
hinzugefügt der Autor Nikhil Mulley, Quelle
David, irgendeinen Ratschlag, wie man ein RegionLoad-Objekt (oder HRegion für diese Angelegenheit) bereits mit HRegionInfo versorgt? Ich zerbringe mir den Kopf, um diese scheinbar unkomplizierte Verbindung über hbase api zu finden ...
hinzugefügt der Autor Ivan Balashov, Quelle
@NikhilMulley Nein, Entschuldigung. Aber viel Glück für Sie! Mit HBase wirst du es brauchen! ;)
hinzugefügt der Autor Ivan Balashov, Quelle
genau das, was ich gesucht habe, danke user698197
hinzugefügt der Autor sulabhc, Quelle
ha ... ich nehme an, ich sollte meinen Anzeigenamen ändern - danke, dass ich darauf hingewiesen habe :)
hinzugefügt der Autor David Pinto, Quelle

Was stimmt nicht mit dem Standard Load Balancer ?

Aus dem Wiki:

Der Balancer ist eine periodische Operation, die auf dem Master ausgeführt wird, um Regionen auf dem Cluster neu zu verteilen. Es wird über hbase.balancer.period konfiguriert und ist standardmäßig auf 300000 (5 Minuten) eingestellt.

Wenn Sie es wirklich selbst machen möchten, könnten Sie tatsächlich die Hadoop-API verwenden und insbesondere die Klasse FileStatus . Diese Klasse dient als Schnittstelle zur Darstellung der Client-seitigen Informationen für eine Datei.

0
hinzugefügt
Tatsächlich berücksichtigt der loadBalancer von Hbase die gesamte Tabelle für den Ausgleich, aber ich möchte Regionen nach einzelnen Tabellen ausgleichen.
hinzugefügt der Autor sulabhc, Quelle
Das könnte Sie dann interessieren: issues.apache.org/jira/browse/HBASE- 3373
hinzugefügt der Autor Pieterjan, Quelle