在HBase中,每个表默认时都由一个Region存储原数据,但是若当数据慢慢增加时,就会将一个Region分裂成其他若干个不同的region。但是这种无序的分裂,会让后期的表扫描,表过滤操作很不方便(特别耗时)。正是着眼于未来表的改变,于是有了为表创建分区的操作。
一个有效的提高批量导入的性能的方式,是预创建空的区域。但同时需要稍微保守一点,因为过多的区域会实实在在的降低性能。根据hbase中rowkey的分布,可以设置相应的region(分区)。这样就可以防止大数据插入时的热点问题,提高数据插入的效率。但是与此同时我们会遇到几个问题:
- 01.数据的rowkey是如何分布的?
- 02.规划一下需要分成多少region?每个region的startkey和endkey是多少?
- 03.该根据怎样的分区键分区?
每个分区都由一对分区键控制,如果需要创建一个分区表,那么首先得确定该表以什么键分区。一般来说,因为在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'}
执行结果如下所示:
文章来源: HBase中建立分区表