Hbase预分区种子生成

提前生成Hbase预分区种子,在创建Hbase表时也进行相应的预分区,同时设置预分区的个数,预分区的范围对应Hbase监控页面的Region Server的start key与End key,从而使数据能够均匀的分布于各个Region中.

private static final String[] PARTITIONS = generatPartitionSeed();

//生成3844个分区种子
public static String[] generatPartitionSeed(){
    List<Character>seeds = List.newArrayList();
    for(int i=‘0‘;i<=‘9‘;i++){
        seeds.add((char) i);
    }
    for(int i = ‘A‘;i<=‘Z‘;i++){
        seeds.add((char) i);
    }
    for(int i = ‘a‘;i<=‘z‘;i++){
        seeds.add((char) i);
    }
    int k = 0;
   //获得总共的分区个数
    String[] partions = new String[seeds.size()*seeds.get(j));
    for(int i =0;i<seeds.size();i++){
        for(int j=0;j<seeds.size();j++){
           //两两组合成为分区start key
            partions[k] = StringUtil.join(seeds.get(i),seeds.get(j));
            k++;
        }
    }
    return partions;
}    

//按指定数量生成分区种子
public static String[] generatPartitionSeed(int limit){
    int size = PARTITIONS.length;
    int[] space = new int[limit];
    for(int pt = 0;pt<size;){
        for(int j=0;j<space.length;j++){
            ++space[j];
            pt++;
            if(pt == size){
                break;
            }
        }
    }
String[] seed = new String[limit+1];
int position = 0;
for(int i =0;i<space.length;i++){
      seed[i] = PARTITIONS[position];
      position += space[i];
}
seed[seed.length -1] = PARTITIONS[PARTITIONS.length -1];
return seed;
}

//生成后的rowkey
public static String generatRow(String str){
    int i = Math.abs(str.hashCode() % PARTITION.length);
    return StringUtils.join(PARTITIONS[i],"-",str);
}

public static void main(String[] args){
    String[] arr = generatPartitionSeed(100);
    for(int i = 0;i<arr.length;i++){
        System.out.println(arr[i]);
    }
}
时间: 2024-10-10 13:25:20

Hbase预分区种子生成的相关文章

HBase预分区のUniformSplit

如果某个hbase的表查询只是以随机查询为主,可以用UniformSplit的方式进行,它是按照原始byte值(从0x00~0xFF)右边以00填充.以这种方式分区的表在插入的时候需要对rowkey进行一个技巧性的改造, 比如原来的rowkey为rawStr,则需要对其取hashCode,然后进行按照比特位反转后放在最初rowkey串的前面.可以充分利用Bytes这个工具类来做. public static void main(String[] args) throws Exception {

HBase表预分区

HBase 预分区 在创建HBase表的时候默认一张表只有一个region,所有的put操作都会往这一个region中填充数据,当这个一个region过大时就会进行split.如果在创建HBase的时候就进行预分区则会减少当数据量猛增时由于region split带来的资源消耗. HBase表的预分区需要紧密结合业务场景来选择分区的key值,每个region都有一个startKey和一个endKey来表示该region存储的rowKey范围. 创建包含预分区表的命令如下: > create 't

HBase Rowkey的散列与预分区设计

转自:http://www.cnblogs.com/bdifn/p/3801737.html 问题导读:1.如何防止热点?2.如何预分区?扩展:为什么会产生热点存储? HBase中,表会被划分为1...n个Region,被托管在RegionServer中.Region二个重要的属性:StartKey与EndKey表示这个Region维护的rowKey范围,当我们要读/写数据时,如果rowKey落在某个start-end key范围内,那么就会定位到目标region并且读/写到相关的数据.简单地说

hbase建表create高级属性 //hbase 表预分区也就是手动分区 这个很重要

2019/2/19 星期二 hbase建表create高级属性 //hbase 表预分区也就是手动分区 这个很重要 下面几个shell 命令在后续的hbase 操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性1.BLOOMFILTER 默认是NONE 是否使用布隆过虑使用何种方式布隆过滤可以每列族单独启用.使用HColumnDescriptor.setBloomFilterType(NONE |ROW | ROWCOL) 对列族单独启用布隆.Default = N

通过直接预分区的方式建表

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 /*通过直接预分区的方式建表*/ private static void printTableRegion(String tableName)throws IOException{     System.out.println("Prtint region of table:"+tableName);//打印reginon

Region的预分区

Region的预分区 1.预分区的方式 共有四种方式 2.帮助信息 help 'create' 3.第一种方式 4.在页面上查看效果(端口号:60010) 5.第二种方式 )创建文件,并在文件中书写分区的值 )创建表 6.观察效果 7.第三种方式 但是不常使用,因为这种方式是hash值进行分区,不再需要对rowkey进行设计 8.观察效果 9.第四种方式API

新闻预览,动态生成层级ul-li

1 <div class="row" id="add-withinfosortId-row" style="display: none"> 2 <div class="col-md-12" id="add-withinfosortId-divId"></div> 3 </div> 4 <div class="sticky-header"

HBase自动分区

HBase扩展和负载均衡的基本单位是Region.Region从本质上说是行的集合.当Region的大小达到一定的阈值,该Region会自动分裂(split),当然也可能是合并(merge),合并可以减少Region和相应存储文件的数量(请注意目前HBase[0.94版]不支持在线的Region合并,当然你可以使用工具离线合并,在线和离线可以视为enable,disable状态). Bigtable Paper认为一台Server上保有10到1000个Region为佳,每个Region的大小在1

预分区的两种方式