HBase
 sql >> Base de données >  >> NoSQL >> HBase

Les régions HBase fusionnent

HBase écrit des données sur plusieurs serveurs, appelés serveurs de région .

Chaque serveur de région contient une ou plusieurs Régions , et les données sont attribuées à ces régions ; Hbase contrôlera quel serveur de région contrôle quelle(s) région(s).

Le nombre de régions peut être défini au niveau de la création de la table :

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

Nous avons précédemment défini que 5 régions seraient précises, en ce qui concerne le nombre de serveurs de région et la taille des régions souhaitées, et 2 algorithmes de base sont fournis, HexStringSplit et UniformSplit (mais vous pouvez ajouter le vôtre).

Vous pouvez fournir vos propres répartitions :

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

Donc ce table2 a été créé avec nos 5 régions, allons sur HBase webUI pour voir à quoi ça ressemble :

Nous avons nos 5 régions, voir la répartition des clés, et nous pouvons voir dans les noms des régions :table_name, start_key, end_key, horodatage.ENCODED_REGIONNAME.

Alors maintenant, si nous voulons fusionner des régions, nous pouvons utiliser merge_region dans hbase shell.
Les régions doivent être adjacentes.

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

Ouais.

Notez que le ENCODED_REGIONNAME de la région de résultat est nouveau.

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

Laissons fusionner toutes les régions, éventuellement !

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

On voit alors qu'il ne reste qu'une seule région :

Pour mémoire, vous pouvez créer une table HBase pré-découpée si vous connaissez la répartition de vos clés :soit en passant SPLITS, soit en fournissant un SPLITS_FILE qui contient les points de dédoublement (donc nombre de lignes =régions -1)
Attention à la commande, SPLITS_FILE avant {…} ne fonctionnera pas.

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

Et le résultat :