Hbase-regioformaat verkrijgen via API

Ik probeer een hulpmiddel voor het uitbalanceren van Hbase te maken dat regio's in regioServers kan compenseren voor een tabel op basis van de regio en/of de regiogrootte (de som van de bestandsgroottes). Ik kon geen enkele Hbase API-klasse vinden die de regiogrootte of gerelateerde info retourneert. Ik heb al een paar van de klassen gecontroleerd die kunnen worden gebruikt om andere tabel-/regio-info te krijgen, bijvoorbeeld org.apache.hadoop.hbase.client.HTable en HBaseAdmin.

Ik denk, een andere manier om dit te implementeren is door een van de Hadoop-klassen te gebruiken die de grootte van de mappen in het bestandssysteem retourneert, bijvoorbeeld voor org.apache.hadoop.fs.FileSystem geeft de bestanden weer onder een bepaald HDFS-pad.

Suggesties?

2
ja ru de

2 antwoord

Ik gebruik dit om beheerde splitsingen van regio's te maken, maar u kunt het gebruiken om de balans zelf te laden. Ik laad ook de balans om de regio's (van een gegeven tabel) gelijkmatig over onze knooppunten te verspreiden, zodat MR-taken gelijkmatig worden verdeeld.

Misschien is het onderstaande codefragment nuttig?

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
toegevoegd
hi @IvanBalashov Ik vraag me af of je hier doorheen kunt komen om via api de grootte van de regio's van een hbase-tabel te krijgen? Ik heb een vergelijkbare situatie en api is nu een doolhof.
toegevoegd de auteur Nikhil Mulley, de bron
Ja. er lijkt een api beschikbaar te zijn voor hbase maar 0.96/0.98 als onderdeel van HBaseAdmin en ik gebruik 0.94, dus ik zit vast tot een upgrade. Ook de statistieken die in 0.96 beschikbaar zijn gemaakt maken het voor me gemakkelijk om het metriekensysteem te bevragen en de regionsize te controleren, dus dat is een andere benadering in plaats van api.
toegevoegd de auteur Nikhil Mulley, de bron
David, enig advies over hoe je het RegionLoad-object (of de HRegion voor die kwestie) kunt krijgen die al bekend is met HRegionInfo? Ik ben kapot aan mijn hersens en probeer deze ogenschijnlijk eenvoudige connectie te achterhalen via hbase api ...
toegevoegd de auteur Ivan Balashov, de bron
@NikhilMulley Nee, sorry. Maar veel geluk voor jou! Met HBase heb je het nodig! ;)
toegevoegd de auteur Ivan Balashov, de bron
precies wat ik zocht, bedankt user698197
toegevoegd de auteur sulabhc, de bron
ha ... ik veronderstel dat ik mijn weergavenaam moet veranderen - bedankt dat ik dat heb gezegd :)
toegevoegd de auteur David Pinto, de bron

Wat is er mis met de standaard Load Balancer ?

Van de Wiki:

De balancer is een periodieke bewerking die wordt uitgevoerd op de master om regio's op het cluster opnieuw te verdelen. Het is geconfigureerd via hbase.balancer.period en is standaard ingesteld op 300000 (5 minuten).

Als je het echt zelf wilt doen, kun je inderdaad de Hadoop API gebruiken en meer specifiek de klasse FileStatus . Deze klasse fungeert als een interface om de client-side-informatie voor een bestand weer te geven.

0
toegevoegd
Eigenlijk beschouwt Hbase's loadBalancer alle tabellen voor balancering, maar ik wil regio's in evenwicht brengen met individuele tabellen.
toegevoegd de auteur sulabhc, de bron
Mogelijk bent u hierin geïnteresseerd: issues.apache.org/jira/browse/HBASE- 3373
toegevoegd de auteur Pieterjan, de bron