
创建表时,只有一个分区region,当该分区达到一定的值时,会进行分区,此时分区会影响Hbase的性能。而且每一个region维护着startRow与endRow,如果加入的数据符合某个region维护的rowKey范围,则该数据交给这个region维护。因此可以添加预分区。
1.手动设定预分区
create 'group','info',SPLITS =>['10','20','30','40']
2.生成16进制序列预分区
create 'group2','info',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
3.按照文件内容预分区
文件内容:spilt.txt aaaa bbbb cccc dddd create 'group3', 'info',SPLITS_FILE => '/opt/module/hive/datas/spilt.txt'
4.根据API分区
public class HbaseConnect {
public static void main(String[] args) throws IOException {
// 1.获取配置类
Configuration conf = HbaseConfiguration.create();
// 2.给配置类添加配置
conf.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104");
// 3.获取连接
Connection connection = ConnectionFactory.createConnection(conf);
// 4.获取admin
Admin admin = connection.getAdmin();
// 5.获取descriptor的builder
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(TableName.valueOf("bigdata", "group4"));
// 6. 添加列族
builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("info")).build());
// 7.创建对应的切分
byte[][] splits = new byte[3][];
splits[0] = Bytes.toBytes("aaaa");
splits[1] = Bytes.toBytes("bbbb");
splits[2] = Bytes.toBytes("cccc");
// 8.创建表
admin.createTable(builder.build(),splits);
// 9.关闭资源
admin.close();
connection.close();
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)