sql >> Database >  >> NoSQL >> HBase

HBase-regio's samenvoegen

HBase schrijft gegevens naar meerdere servers, genaamd Regioservers .

Elke regioserver bevat een of meerdere Regio's , en gegevens worden toegewezen aan deze regio's; Hbase bepaalt welke regioserver welke regio('s) beheert.

Regionummer kan worden gedefinieerd op het niveau van het maken van de tabel:

[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'}

We hebben eerder gedefinieerd dat 5 regio's nauwkeurig zouden zijn, met betrekking tot het aantal regioservers en de gewenste regiogrootte, en er worden 2 basisalgoritmen geleverd, HexStringSplit en UniformSplit (maar u kunt de uwe toevoegen).

U kunt uw eigen splitsingen opgeven:

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

Dus deze tabel2 is gemaakt met onze 5 regio's, laten we naar HBase webUI gaan om te zien hoe het eruit ziet:

We hebben onze 5 regio's, zie de sleutels herpartitie, en we kunnen in de regio namen zien:table_name, start_key,end_key,timestamp.ENCODED_REGIONNAME.

Dus als we nu regio's willen samenvoegen, kunnen we de merge_region in hbase shell gebruiken.
De regio's moeten aangrenzend zijn.

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

Ja.

Merk op dat de ENCODED_REGIONNAME van de resultaatregio een nieuwe is.

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

Laat alle regio's samenvoegen, uiteindelijk!

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

Dan kunnen we zien dat er nog maar één regio over is:

Voor de goede orde, u kunt een vooraf gesplitste HBase-tabel maken als u de herpartitie van uw sleutels kent:ofwel door SPLITS door te geven, of door een SPLITS_FILE op te geven dat de splitsingspunten bevat (dus regels nummer =regio's -1)
Let op de volgorde, SPLITS_FILE voor {…} werkt niet.

[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'

En het resultaat:


  1. Wat is tcp-backlog in redis.conf

  2. Hoe redis gebruiken om hiërarchische gegevens op te slaan?

  3. Hoe laat ik een MongoDB-database van de opdrachtregel vallen?

  4. MongoError:kon geen verbinding maken met de server bij de eerste verbinding