sql >> Base de Datos >  >> NoSQL >> HBase

Fusión de regiones HBase

HBase escribe datos en varios servidores, llamados Servidores de región .

Cada servidor de región contiene una o varias Regiones , y los datos se asignan a estas regiones; Hbase controlará qué servidor de región controla qué región(es).

El número de regiones se puede definir en el nivel de creación de la tabla:

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

Hemos definido previamente que 5 regiones serían precisas, con respecto a la cantidad de servidores de la región y el tamaño deseado de las regiones, y se proporcionan 2 algoritmos básicos, HexStringSplit y UniformSplit (pero puede agregar el suyo).

Puede proporcionar sus propias divisiones:

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

Así que esta tabla2 se ha creado con nuestras 5 regiones, vayamos a HBase webUI para ver cómo se ve:

Tenemos nuestras 5 regiones, vemos la distribución de claves y podemos ver en los nombres de las regiones:table_name, start_key,end_key,timestamp.ENCODED_REGIONNAME.

Ahora, si queremos fusionar regiones, podemos usar merge_region en el shell de hbase.
Las regiones deben ser adyacentes.

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

Sí.

Tenga en cuenta que ENCODED_REGIONNAME de la región de resultados es nueva.

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

¡Dejemos fusionar todas las regiones, eventualmente!

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

Entonces podemos ver que solo queda una región:

Para el registro, puede crear una tabla HBase previamente dividida si conoce la partición de sus claves:ya sea pasando SPLITS o proporcionando un SPLITS_FILE que contiene los puntos de división (por lo tanto, número de líneas =regiones -1)
Cuidado con el orden, SPLITS_FILE antes de {…} no funcionará.

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

Y el resultado: