O HBase grava dados em vários servidores, chamados de Servidores de região .
Cada servidor de região contém uma ou várias Regiões , e os dados são alocados nessas regiões; O Hbase controlará qual servidor de região controla qual(is) região(ões).
O número das regiões pode ser definido no nível de criação da tabela:
[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'}
Definimos anteriormente que 5 regiões seriam precisas, em relação ao número de servidores da região e ao tamanho das regiões desejadas, e 2 algoritmos básicos são fornecidos, HexStringSplit e UniformSplit (mas você pode adicionar o seu).
Você pode fornecer suas próprias divisões:
hbase(main):001:0> create 'table2', 'columnfamily1', {NUMREGIONS => 5, SPLITS=> ['a', 'b', 'c']}
Então esta tabela2 foi criado com nossas 5 regiões, vamos ao HBase webUI para ver como fica:
Nós temos nossas 5 regiões, veja a repartição de chaves, e podemos ver nos nomes das regiões:table_name, start_key,end_key,timestamp.ENCODED_REGIONNAME.
Então agora, se quisermos mesclar regiões, podemos usar o merge_region no shell hbase.
As regiões devem ser adjacentes.
hbase(main):010:0> merge_region '234a12e83e203f2e3158c39e1da6b6e7', '89dd2d5a88e1b2b9787e3254b85b91d3'
0 row(s) in 0.0140 seconds
Sim.
Observe que o ENCODED_REGIONNAME da região de resultado é novo.
hbase(main):012:0> merge_region 'bfad503057fca37bd60b5a83109f7dc6','e37d7ab5513e06268459c76d5e7335e4'
0 row(s) in 0.0040 seconds
Vamos mesclar todas as regiões, eventualmente!
hbase(main):013:0> merge_region '0f5fc22bf0beacbf83c1ad562324c778','af6d7af861f577ba456cff88bf5e5e38','3f1e029afd907bc62f5e5fb8b6e1b5cf','3f1e029afd907bc62f5e5fb8b6e1b5cf'
0 row(s) in 0.0290 seconds
Então podemos ver que apenas uma região permanece:
Para o registro, você pode criar uma tabela HBase pré-dividida se você souber a repartição de suas chaves:passando SPLITS ou fornecendo um SPLITS_FILE que contém os pontos de divisão (portanto, número de linhas =regiões -1)
Esteja ciente da ordem, SPLITS_FILE antes de {…} não 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'
E o resultado :