文档简介:
创建表
功能简介
HBase通过org.apache.hadoop.hbase.client.Admin对象的createTable方法来创建表,并指
定表名、列族名。创建表有两种方式(强烈建议采用预分Region建表方式):
l 快速建表,即创建表后整张表只有一个Region,随着数据量的增加会自动分裂成
多个Region。
l 预分Region建表,即创建表时预先分配多个Region,此种方法建表可以提高写入
大量数据初期的数据写入速度。
说明
表的列名以及列族名不能包含特殊字符,可以由字母、数字以及下划线组成。
代码样例
以下代码片段在cn.chinatelecom.hbase.sample.client包的“HbaseClient”类的
createTable方法中。
public void createTable(TableName tableName) throws IOException{
ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("info"))//(1)
.setCompressionType(Compression.Algorithm.LZ4)//注[1]
.setDataBlockEncoding(DataBlockEncoding.DIFF)
.build();
TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tableName)//(2)
.setColumnFamily(columnFamilyDescriptor)//(3)
.setCompactionEnabled(true)
.setMaxFileSize(10 * 1024 * 1024 * 1024)
.build();//注[2]
admin.createTable(tableDescriptor);//(4)
}
解释
(1)创建列族描述符
(2)创建表描述符
(3)添加列族描述符到表描述符中
(4)调用Admin的建表方法。
注意事项
l 注[1] 可以设置列族的压缩方式,代码片段如下:
//设置编码算法,HBase提供了DIFF,FAST_DIFF和PREFIX三种编码算法
setDataBlockEncoding(DataBlockEncoding.DIFF)
//设置文件压缩方式,HBase默认提供了LZ4、BZIP2、GZ、LZO、SNAPPY和ZSTD压缩算法
//其中ZSTD的压缩率高,但压缩和解压性能相对LZ4低,适用于冷数据
//LZ4压缩率低,但压缩解压性能高,适用于热数据
//建议默认开启LZ4压缩
setCompressionType(Compression.Algorithm.LZ4);
l 注[2] 可以通过指定起始和结束RowKey,或者通过RowKey数组预分Region两种方
式建表,代码片段如下:
// 创建一个预划分region的表
byte[][] splits = new byte[4][];
splits[0] = Bytes.toBytes("A");
splits[1] = Bytes.toBytes("H");
splits[2] = Bytes.toBytes("O");
splits[3] = Bytes.toBytes("U");
admin.createTable(htd, splits);