首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。