Wie kann ich in hbase vorteilen?

8

Ich speichere Daten in hbase mit 5 Regionsservern. Ich benutze md5 Hash von URL als meine Zeilenschlüssel. Derzeit werden alle Daten nur in einem Regionsserver gespeichert. Daher möchte ich die Regionen vorab aufteilen, so dass die Daten einheitlich über den gesamten Regionsserver übertragen werden, sodass die Daten in jedem Regionsserver einheitlich übertragen werden. Ich möchte Daten als erstes Zeichen des Zeilenschlüssels teilen. Als erstes Zeichen ist von 0 bis f (16 Zeichen). Wie Daten mit Zeilenschlüssel beginnend von 0 bis 3 gehen in 1. Region Server, 3-6 auf 2., 6-9 auf 3., a-d am 4., d-f am 5.. Wie kann ich es tun?

    
Harsh Sharma 27.01.2015, 08:11
quelle

3 Antworten

8

Sie können beim Erstellen der Tabelle eine SPLITS-Eigenschaft angeben.

%Vor%

Die 4 Splitpunkte erzeugen 5 Regionen.

Bitte beachten Sie, dass HBases DefaultLoadBalancer dies nicht tut Um eine 100% ige gleichmäßige Verteilung zwischen den Regionsservern zu gewährleisten, kann es vorkommen, dass ein Regionsserver mehrere Regionen aus derselben Tabelle hostet.

Weitere Informationen zur Funktionsweise finden Sie in dies :

%Vor%      

Generieren Sie einen globalen Lastverteilungsplan gemäß der angegebenen Karte   von Serverinformationen zu den am meisten geladenen Regionen jedes Servers. Das   Load Balancing Invariant ist, dass alle Server innerhalb einer Region von sind   die durchschnittliche Anzahl von Regionen pro Server. Wenn der Durchschnitt eine ganze Zahl ist   Anzahl, alle Server werden auf den Durchschnitt ausgewogen sein. Sonst alles   Die Server haben entweder durchschnittliche (durchschnittliche) oder durchschnittliche (durchschnittliche) Bereiche.   HBASE-3609 Modellierte Regionen, die mit Guava's MinMaxPriorityQueue so arbeiten   das können wir von beiden Enden der Warteschlange holen. Am Anfang haben wir   Überprüfen Sie, ob ein leerer Regionsserver vom Master gefunden wurde.   Wenn ja, wählen wir abwechselnd neue / alte Regionen von Kopf / Schwanz aus   regionesToMove. Dieser Wechsel verhindert, dass junge Cluster gebildet werden   Regionen auf dem neu erkannten Regionsserver. Ansonsten wählen wir   neue Regionen von Kopf der RegionenToMove. Eine weitere Verbesserung von   HBASE-3609 ist, dass wir Regionen von regionsToMove zu untergeordnet zuweisen   Server in Round-Robin-Mode. Zuvor ein unterbelasteter Server   würde gefüllt werden, bevor wir auf den nächsten unterbelasteten Server gehen,   zur Clusterbildung junger Regionen führen. Zum Schluss mischen wir uns zufällig   unterbelastete Server, so dass sie reload Regionen relativ erhalten   gleichmäßig über Aufrufe von balanceCluster (). Der Algorithmus ist derzeit   als solche implementiert:

     
  1. Bestimmen Sie die zwei gültigen Zahlen von Regionen, die jeder Server haben sollte, MIN = floor (Durchschnitt) und MAX = ceiling (Durchschnitt).
  2.   
  3. Iterieren Sie die am meisten ausgelasteten Server, und geben Sie Regionen von jedem Server frei, damit jeder Server genau MAX-Regionen hostet. Stoppen Sie, sobald Sie einen Server erreichen   das hat bereits & lt; = MAX-Regionen. Ordne die Regionen so an, dass sie sich am meisten bewegen   zuletzt mindestens.
  4.   
  5. Iterieren Sie die am wenigsten ausgelasteten Server, indem Sie Regionen zuweisen, sodass jeder Server genau MIN-Regionen aufweist. Stoppen Sie, sobald Sie einen Server erreichen, der   hat bereits & gt; = MIN-Regionen. Regionen, die unterbelastet sind   Server sind diejenigen, die im vorherigen Schritt vergossen wurden. Es ist möglich   dass es nicht genug Regionen gab, um jede unterbelastete zu füllen   Server zu MIN. Wenn dies der Fall ist, haben wir eine Reihe von Regionen, die wir tun müssen   so, benötigteRegionen. Es ist auch möglich, dass wir jeweils füllen konnten   unterbelastet, aber endete mit Regionen, die nicht zugewiesen wurden   Überladene Server, die aber immer noch keine Zuweisung haben. Wenn nicht   von diesen Bedingungen halten (keine Regionen benötigt, um die unterbelasteten zu füllen   Server, keine Regionsreste von überlasteten Servern), wir sind fertig und   Rückkehr. Ansonsten behandeln wir diese Fälle unten.
  6.   
  7. Wenn necessariesRegions nicht Null ist (haben Sie noch unterbeladene Server), durchlaufen wir die am meisten ausgelasteten Server erneut und geben dabei einen einzelnen Server ab   jeder (das bringt sie von MAX-Regionen zu MIN-Regionen).
  8.   
  9. Wir haben jetzt definitiv mehr Regionen, die eine Zuweisung benötigen, entweder vom vorherigen Schritt oder vom ursprünglichen Shedding von überladen   Server. Iterieren Sie die am wenigsten belasteten Server, die jeweils MIN füllen. Wenn wir   haben immer noch mehr Regionen, die eine Zuweisung benötigen, iterieren sie am wenigsten   geladene Server, dieses Mal geben Sie jedes (bis MAX zu füllen) bis   wir laufen aus.
  10.   
  11. Alle Server werden jetzt entweder MIN- oder MAX-Regionen hosten. Darüber hinaus wird garantiert, dass alle Server-Hosting- & gt; = MAX-Regionen mit MAX enden   Regionen am Ende des Ausgleichs. Dies gewährleistet die minimale Anzahl   von möglichen Regionen werden verschoben.
  12.   

TODO: Wir können höchstens die Anzahl der Regionen von a   bestimmten Server, wie viele sie als am meisten geladen melden. Sollten wir   einfach alle Zuweisungen im Speicher behalten? Irgendwelche Einwände? Heißt das wir?   Benötigen Sie HeapSize auf HMaster? Oder nur vorsichtiger Monitor? (aktuelles Denken   werden wir alle Zuweisungen im Speicher halten)

    
Rubén Moraleda 27.01.2015, 09:13
quelle
4

Wenn Sie alle Daten bereits gespeichert haben, empfehle ich Ihnen, einige Regionen manuell auf andere Regionsserver zu verschieben, indem Sie hbase verwenden Schale .

%Vor%
  

Verschiebe eine Region. Geben Sie optional target regionserver an, den wir auswählen   eins nach dem Zufallsprinzip. HINWEIS: Sie übergeben den Namen der codierten Region, nicht die Region   benennen Sie diesen Befehl ein wenig anders als die anderen. Das codiert   Regionsname ist das Hash-Suffix für Regionsnamen: z. wenn die Region   Name waren   TestTable, 0094429456,1289497600452.527db22f95c8a9e0116f0cc13c680396.   dann ist der codierte Bereichsname Teil   527db22f95c8a9e0116f0cc13c680396 Ein Servername ist sein Host, Port plus   Startcode. Beispiel: host187.example.com, 60020,1289493121758

    
Andrey Kudryavtsev 28.01.2015 17:43
quelle
0

Wenn Sie Apache Phoenix zum Erstellen von Tabellen in HBase verwenden, können Sie SALT_BUCKETS in der CREATE-Anweisung angeben. Die Tabelle wird in so viele Regionen aufgeteilt, wie der erwähnte Bucket angibt. Phoenix berechnet den Hash des Zeilenschlüssels (höchstwahrscheinlich ein numerischer Hashwert% SALT_BUCKETS) und weist die Spaltenzelle der entsprechenden Region zu.

%Vor%

Dadurch wird die Tabelle in drei Bereiche aufgeteilt

Alternativ können Sie auf der Standardbenutzeroberfläche von HBase Regionen entsprechend aufteilen.

    
Pratyay 16.05.2016 14:11
quelle

Tags und Links