首页 > 代码库 > HBase预分区のUniformSplit

HBase预分区のUniformSplit

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

public static void main(String[] args) throws Exception {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop1");
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        HConnection connection = HConnectionManager.createConnection(conf);
        HTableInterface table = connection.getTable("huanggang");
        for (int i=1; i< 6553500; i++) {
            byte[] rowKey = Bytes.add(Bytes.toBytes(Integer.reverse(Integer.valueOf(Integer.valueOf(i).hashCode()))), Bytes.toBytes(i));
            System.out.println(rowKey);
            Put put = new Put(rowKey);
            put.add("f".getBytes(), "col1".getBytes(), Bytes.toBytes(new Random().nextInt(10000)));
            put.add("f".getBytes(), "col2".getBytes(), Bytes.toBytes(new Random().nextInt(10000)));
            put.add("f".getBytes(), "col3".getBytes(), Bytes.toBytes(new Random().nextInt(10000)));
            put.add("f".getBytes(), "col4".getBytes(), Bytes.toBytes(new Random().nextInt(10000)));
            put.add("f".getBytes(), "col5".getBytes(), Bytes.toBytes(new Random().nextInt(10000)));
            put.add("f".getBytes(), "col6".getBytes(), Bytes.toBytes(new Random().nextInt(10000)));
            table.put(put);
        }
        table.flushCommits();
        table.close();
    }

建表:



表现:


HBase预分区のUniformSplit