HBase中建立分区(表)
1.什么是分区?
在HBase中,每个表默认时都由一个Region存储原数据,但是若当数据慢慢增加时,就会将一个Region分裂成其他若干个不同的region。但是这种无序的分裂,会让后期的表扫描,表过滤操作很不方便(特别耗时)。正是着眼于未来表的改变,才有了为表创建分区的操作。
一个有效的高性能方式是预创建空的区域。但同时需要稍微保守一点,因为过多的区域会实实在在的降低性能。根据hbase
中rowkey
的分布,可以设置相应的region(分区)
。这样就可以防止大数据插入时的热点问题,提高数据插入的效率。但是与此同时我们会遇到以下几个问题:
- 01.首先得知道:数据的
rowkey
是什么样的? - 02.根据
rowkey
,需要规划一下region
数目?每个region
的startkey
和endkey
是多少?
2.如何创建分区?
每个分区都由一对分区键控制,如果需要创建一个分区表,那么首先得确定该表以什么键分区。一般来说,因为在ASCII码表中,最大的可打印字符是~
,再者就是|
。所以我们就可以选择这两种字符作为分区键的标识来结束。在本篇博客里,我使用|
作为分区键的结束标识。分区键的设置如下:
[root@littlelawson ~]# cat region_split_info.txt
0001|
0002|
0003|
0004|
0005|
0006|
0007|
0008|
0009|
这里的第一行是第一个region
的stopkey
, 最后一行不仅是倒数第二个region
的stopkey
,同时你也是最后一个region
的startKey
。也就是说上述的几个值都是key取值范围的分割点。通过9个分割点,便可以得到10个分区。如下所示:
_r1_|_r2_|_r3_|_r4_|_r5_|_r6_|_r7_|_r8_|_r9_|_r10_|
这里的r1指的就是region1,其它以此类推。
以该文件中的内容作为分区键,创建一个含分区的表命令如下:
create 'split_table_test','cf',{SPLITS_FILE=>'region_spilit_into.txt'}
在Web UI 端,查看HBase的中的表,结果如下所示: