sql >> Databasteknik >  >> NoSQL >> HBase

HBase-regioner slås samman

HBase skriver data till flera servrar, kallade Region Servers .

Varje regionserver innehåller en eller flera regioner , och data allokeras om dessa regioner; Hbase kommer att styra vilken regionserver som styr vilken/vilka regioner.

Regionnummer kan definieras på tabellskapande nivå:

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

Vi har tidigare definierat att 5 regioner skulle vara korrekta när det gäller antal regionservrar och önskad regionstorlek, och två grundläggande algoritmer tillhandahålls, HexStringSplit och UniformSplit (men du kan lägga till din).

Du kan tillhandahålla dina egna uppdelningar :

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

Så den här tabell2 har skapats med våra 5 regioner, låt oss gå till HBase webUI för att se hur det ser ut :

Vi har våra 5 regioner, se nycklarnas ompartition, och vi kan se i regionernas namn:table_name, startnyckel, slutnyckel, tidsstämpel.ENCODED_REGIONNAME.

Så nu, om vi vill slå samman regioner, kan vi använda merge_region i hbase-skalet.
Regionerna måste vara intilliggande.

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

Ja.

Observera att ENCODED_REGIONNAME för resultatregionen är en ny.

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

Låt slå samman alla regioner så småningom!

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

Då kan vi se att bara en region återstår :

För att ta reda på, kan du skapa en fördelad HBase-tabell om du känner till ompartitionen av dina nycklar:antingen genom att skicka SPLITS, eller genom att tillhandahålla en SPLITS_FILE som innehåller punkterna för uppdelningen (så radnummer =regioner -1)
Var medveten om beställningen, SPLITS_FILE före {...} fungerar inte.

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

Och resultatet :


  1. fråga i mongo Shell ger SyntaxError:missing :after property

  2. Apache HBase Replication:Operationell översikt

  3. Hur man uppdaterar ett underdokument i mongodb

  4. Hur man använder $cond operation i Spring-MongoDb aggregeringsramverk