HBase 数据入库(2)-预分区建表

书接上回!!!

创建表——预分区

1 在不进行预分区时,默认建表只有一个region,在数据写入时所有的数据都会写入到这一个region,当这个region达到某一量时,无法承受不断增长的数据,就会进行分片split,由原来的一个region 分成两个region,这样数据都往一个region上写将会有写热点的问题,split时会消耗大量的集群I/O

2 建表时进行预分区,数据写入到多个region中,就不会存在写热点问题,同时,减少的数据split的几率,提高数据写入效率

3 创建表时创建预分区

String[] splitStr = {"10","20","30","40","50","60","70","80","90","99"}  // 根据rowkey特征进行分区的设定

public boolean CreateTableAsync(String tablename, String columnFamily, String[] splitStr)
{
    TableName tName = TableName.valueOf(tablename);
    try
    {
        if(!hbaseAdmin.tableExists(tName))
        {
            HTableDescriptor newHTD = new HTableDescriptor(tName); // 表名
            HColumnDescriptor newHCD = new HColumnDescriptor(columnFamily); // 列族名
            newHCD.setMaxVersions(1); // 只保留一个版本数据
            newHTD.addFamily(newHCD);
            byte[][] splitKeys = new byte[splitStr.length][]; // 分区
            for(int i = 0; i < splitStr.length; i++)
            {
                splitKeys[i] = splitStr[i].getBytes("utf-8");
            }
            hbaseAdmin.createTable(newHTD, splitKeys);
            return true;
        }
        else
        {
            return false;
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

你可能感兴趣的:(大数据)