HBaseは、 Region Serversと呼ばれる複数のサーバーにデータを書き込みます 。
各リージョンサーバーには、1つまたは複数のリージョンが含まれています 、およびデータはこれらの領域に割り当てられます。 Hbaseは、どのリージョンサーバーがどのリージョンを制御するかを制御します。
リージョン番号は、テーブル作成レベルで定義できます:
[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'}
リージョンサーバーの数と目的のリージョンサイズに関して、5つのリージョンが正確であると以前に定義しました。また、HexStringSplitとUniformSplitの2つの基本的なアルゴリズムが提供されています(ただし、追加することもできます)。
独自の分割を提供できます:
hbase(main):001:0> create 'table2', 'columnfamily1', {NUMREGIONS => 5, SPLITS=> ['a', 'b', 'c']}
したがって、この table2 5つのリージョンで作成されたので、HBase webUIに移動して、どのように表示されるかを確認しましょう:
5つのリージョンがあり、キーの再パーティションが表示され、リージョン名で確認できます:table_name、 start_key、end_key、timestamp.ENCODED_REGIONNAME。
したがって、リージョンをマージする場合は、hbaseシェルでmerge_regionを使用できます。
リージョンは隣接している必要があります。
hbase(main):010:0> merge_region '234a12e83e203f2e3158c39e1da6b6e7', '89dd2d5a88e1b2b9787e3254b85b91d3'
0 row(s) in 0.0140 seconds
ええ。
結果領域のENCODED_REGIONNAMEが新しいものであることに注意してください。
hbase(main):012:0> merge_region 'bfad503057fca37bd60b5a83109f7dc6','e37d7ab5513e06268459c76d5e7335e4'
0 row(s) in 0.0040 seconds
最終的にはすべてのリージョンをマージしましょう!
hbase(main):013:0> merge_region '0f5fc22bf0beacbf83c1ad562324c778','af6d7af861f577ba456cff88bf5e5e38','3f1e029afd907bc62f5e5fb8b6e1b5cf','3f1e029afd907bc62f5e5fb8b6e1b5cf'
0 row(s) in 0.0290 seconds
次に、1つの領域のみが残っていることがわかります:
記録のために、キーの再パーティション化がわかっている場合は、事前に分割されたHBaseテーブルを作成できます。SPLITSを渡すか、分割ポイントを含むSPLITS_FILEを提供します(したがって、行番号=region -1)
順序に注意してください。{…}の前のSPLITS_FILEは機能しません。
[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'
そしてその結果: