分区
HBase中,表会被划分为1…n个Region,被托管在RegionServer中。Region二个重要的属性:StartKey与 EndKey表示这个Region维护的rowKey范围,当我们要读/写数据时,如果rowKey落在某个start-end key范围内,那么就会定位到目标region并且读/写到相关的数据。
默认地,当我们只是通过HBaseAdmin指定TableDescriptor来创建一张表时,start-end key无边界,region的size越来越大时,大到 一定的阀值,就会找到一个midKey将region一分为二,成为2个region,这个过 程称为分裂(region-split).而midKey则为这二个region的临界
缺点
1.总是往最大start-key的region写记录,之前分裂出来的region不会再被写数据,它们都处于半满状态
2.split是比较耗时耗资源
优点
合理设计rowkey 能让各个region 的并发请求 平均分配(趋于均匀) 使IO 效率达到最高
(预分区需要将hbase.hregion.max.filesize设置一个较大的值,默认是10G(0.94.3 ) 也就是说单个region 默认大小是10G)
预分区
shell
指明分割点
create 't1','f1' ,SPLITS=>['10','20','30','40']
HexStringSplit指明分割策略,-c 10指明要分割的区域数量,-f指明表中的列族,用“:”分割。
hbase org.apache.hadoop.hbase.util.RegionSplitter test_table HexStringSplit -c 10 -f f1
根据文件创建分区并压缩
create 'split_table_test',{NAME =>'cf', CO