创建表时,只有一个分区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条)