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 :