HBase
 sql >> Datenbank >  >> NoSQL >> HBase

HBase-Regionen werden zusammengeführt

HBase schreibt Daten auf mehrere Server, sogenannte Regionsserver .

Jeder Regionsserver enthält eine oder mehrere Regionen , und diesen Regionen werden Daten zugeordnet; Hbase steuert, welcher Regionsserver welche Region(en) kontrolliert.

Die Regionsnummer kann auf der Tabellenerstellungsebene definiert werden:

[hbase@gw vagrant]$ kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase
[hbase@gw vagrant]$ hbase shell
hbase(main):001:0> create 'table2', 'columnfamily1', {NUMREGIONS => 5, SPLITALGO => 'HexStringSplit'}

Wir haben zuvor definiert, dass 5 Regionen in Bezug auf die Anzahl der Regionsserver und die gewünschte Regionsgröße genau sind, und 2 grundlegende Algorithmen werden bereitgestellt, HexStringSplit und UniformSplit (aber Sie können Ihren hinzufügen).

Sie können Ihre eigenen Aufteilungen angeben :

hbase(main):001:0> create 'table2', 'columnfamily1', {NUMREGIONS => 5, SPLITS=> ['a', 'b', 'c']}

Also diese table2 mit unseren 5 Regionen erstellt wurde, gehen wir zur HBase WebUI, um zu sehen, wie es aussieht:

Wir haben unsere 5 Regionen, sehen Sie sich die Schlüsselverteilung an, und wir können in den Regionennamen sehen:table_name, start_key,end_key,timestamp.ENCODED_REGIONNAME.

Wenn wir also Regionen zusammenführen wollen, können wir die merge_region in der hbase-Shell verwenden.
Die Regionen müssen benachbart sein.

hbase(main):010:0> merge_region '234a12e83e203f2e3158c39e1da6b6e7', '89dd2d5a88e1b2b9787e3254b85b91d3'
0 row(s) in 0.0140 seconds

Ja.

Beachten Sie, dass ENCODED_REGIONNAME der Ergebnisregion neu ist.

hbase(main):012:0> merge_region 'bfad503057fca37bd60b5a83109f7dc6','e37d7ab5513e06268459c76d5e7335e4'
0 row(s) in 0.0040 seconds

Eventuell alle Regionen zusammenführen !

hbase(main):013:0> merge_region '0f5fc22bf0beacbf83c1ad562324c778','af6d7af861f577ba456cff88bf5e5e38','3f1e029afd907bc62f5e5fb8b6e1b5cf','3f1e029afd907bc62f5e5fb8b6e1b5cf'
0 row(s) in 0.0290 seconds

Dann können wir sehen, dass nur eine Region übrig bleibt:

Für den Datensatz können Sie eine vorab aufgeteilte HBase-Tabelle erstellen, wenn Sie die Aufteilung Ihrer Schlüssel kennen:entweder durch Übergeben von SPLITS oder durch Bereitstellen einer SPLITS_FILE, die die Aufteilungspunkte enthält (also Zeilennummer =Regionen -1)
Beachten Sie die Reihenfolge, SPLITS_FILE vor {…} wird nicht funktionieren.

[hbase@gw vagrant]$ echo "a\nb\nc" > /tmp/splits.txt;
[hbase@gw vagrant]$ kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase
[hbase@gw vagrant]$ hbase shell
hbase(main):011:0> create 'test_split', { NAME=> 'cf', VERSIONS => 1, TTL => 69200 }, SPLITS_FILE => '/tmp/splits.txt'

Und das Ergebnis: