Hbase的API

Hbase API

准备工作

IDEA新建maven工程,下载maven并导入maven依赖

<dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>1.2.1</version>
</dependency>

Namespace-DDL

1. Junit执行代码模板
public class NamespaceHandler {
   
    private Admin admin;
    @Before
    public void getAdmin() {
   
        admin = HbaseUtil.getAdmin();
    }
    @After
    public void closeAdmin() {
   
        HbaseUtil.closeAdmin(admin);
    }
}
2. 创建namespace的API
@Test
public void createNamespace() {
   
    try {
   
        //获取namespace描述器对象
        NamespaceDescriptor descriptor = NamespaceDescriptor.create("ns1").build();
        //提交到hbase中,进行创建
        admin.createNamespace(descriptor);
    } catch (IOException e) {
   
        e.printStackTrace();
    }	
}
3. 列出所有的namespace
@Test
public void listNamespace() {
   
    try {
   
        //通过客户端,获取namespace的描述器数组
        NamespaceDescriptor[] nss = admin.listNamespaceDescriptors();
        for (NamespaceDescriptor descriptor : nss) {
   
            //遍历描述器进行打印名称
            System.out.println(descriptor.getName());
        }
    } catch (IOException e) {
   
        e.printStackTrace();
    }
}
4. 列出所有namespace中的表名
@Test
public void listNamespaceTable(){
   
    try {
   
        //通过客户端,获取namespace的描述器数组
        NamespaceDescriptor[] nss = admin.listNamespaceDescriptors();
        for (NamespaceDescriptor descriptor : nss) {
   
            System.out.println("-------名称空间: " + descriptor.getName() + "-----------");
            //通过客户端,并指定namespace,来获取相应表描述器的数组,进行遍历
            HTableDescriptor[] tss = admin.listTableDescriptorsByNamespace(descriptor.getName());
            for (HTableDescriptor t : tss) {
   
                System.out.println(t.getTableName());
            }
        }
    } catch (IOException e) {
   
        e.printStackTrace();
    }
}

或者

@Test
public void listNamespaceTable1(){
   
    try {
   
        // 通过客户端,获取所有的TableName,进行遍历
        TableName[] ts = admin.listTableNames();
        for (TableName t : ts) {
   
            System.out.println(t.getNameAsString());
        }
    } catch (IOException e) {
   
        e.printStackTrace();
    }
}
5. 修改namespace的属性信息
@Test
public void alterNamespace() {
   
    try {
   
        //获取指定namespace的描述器
        NamespaceDescriptor descriptor = admin.getNamespaceDescriptor("ns1");
        //设置属性
        descriptor.setConfiguration("author","灰哀之雪");
        descriptor.setConfiguration("company","apple");
        descriptor.setConfiguration("comment","good");
        //进行提交修改
        admin.modifyNamespace(descriptor);
    } catch (IOException e) {
   
        e.printStackTrace();
    }

}
6. 删除namespace
@Test
public void deleteNamespace(){
   
    try {
   
        //删除指定的namespace
        admin.deleteNamespace("ns1");
    } catch (IOException e) {
   
        e.printStackTrace();
    }
}

Table-DDL

1. Junit执行代码模板
public class TableHandler {
   
    private Admin admin;
    @Before
    public void getAdmin() {
   
        admin = HbaseUtil.getAdmin();
    }
    @After
    public void closeAdmin() {
   
        HbaseUtil.closeAdmin(admin);
    }
}
2. 创建一个table
@Test
public void creatTable() {
   
    try {
   
        //获取TableName对象,指定要创建的表名
        TableName tableName = TableName.valueOf("ns1:emp");
        //新建一个表描述器
        HTableDescriptor descriptor = new HTableDescriptor(tableName);
        //新建一个列族描述器
        HColumnDescriptor columnDescriptor = new HColumnDescriptor("f1");
        //设置列族的布隆过滤器为行类型  ROW  列 ROWCOL
        columnDescriptor.setBloomFilterType(BloomType.ROW);
        //设置列族支持缓存
        columnDescriptor.setInMemory(true);
        //设置列族内的单元格支持2个版本
        columnDescriptor.setVersions(1, 2);
        //设置列族的单元格过期时间为7天
        columnDescriptor.setTimeToLive(7 * 24 * 60 * 60);
        //将列族描述器添加到表描述器中, 可以添加多个列族描述器
        descriptor.addFamily(columnDescriptor);

        //提交到Hbase,进行创建
        admin.createTable(descriptor);
    } catch (Exception e) {
   
        e.printStackTrace();
    }

}
3. 修改table的列族属性信息
@Test
public void alterTable1(){
   
    try {
   
        //指定表名
        TableName tableName = TableName.valueOf("ns1:emp");
        //获取表描述器
        HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
        //获取指定的列族的描述器
        HColumnDescriptor columnDescriptor = tableDescriptor.getFamily(Bytes.toBytes("f1"));

        //修改属性
        columnDescriptor.setBloomFilterType(BloomType.ROWCOL);
        columnDescriptor.setVersions(1,2);
        columnDescriptor.setTimeToLive(24*60*60);
        //提交到Hbase
        admin.addColumn(tableName,columnDescriptor);
    } catch (IOException e) {
   
        e.printStackTrace();
    }

}
4. 向table中添加新的列族
@Test
public void alterTable2(){
   
    try {
   
        //获取TableName对象,指定要创建的表名
        TableName tableName = TableName.valueOf("ns1:emp");
        //新建一个表描述器
        HColumnDescriptor columnDescriptor = new HColumnDescriptor("f2");
        //设置列族的布隆过滤器为列类型
        columnDescriptor.setBloomFilterType(BloomType.ROWCOL);
        //设置列族内的单元格支持的版本
        columnDescriptor.setVersions(1,5);
        //设置列族的单元格过期时间
        columnDescriptor.setTimeToLive(2*24*60*60); // 秒为单位
        //提交到Hbase
        admin.addColumn(tableName,columnDescriptor);
    } catch (IOException e) {
   
        e.printStackTrace();
    }

}
5. 获取table的描述信息
@Test
public void describeTable(){
   
    try {
   
        //获取Table对象
        TableName tableName = TableName.valueOf("ns1:emp");
        //获取表描述器
        HTableDescriptor descriptor = admin.getTableDescriptor(tableName);
        //获取列族数组
        HColumnDescriptor[] hcs = descriptor.getColumnFamilies();

        //遍历输出
        for (HColumnDescriptor hc : hcs) {
   
            System.out.println("NAME => "+hc.getNameAsString()+"\t");
            System.out.println("BLOOMFILTER => "+hc.getBloomFilterType()+"\t");
            System.out.println("VERSIONS => "+hc.getMaxVersions()+"\t");
            System.out.println("TTL => "+hc.getTimeToLive()+"\t");
            System.out.println("BLOCKSIZE => "+hc.getBlocksize()+"\t");
        }
    } catch (IOException e) {
   
        e.printStackTrace();
    }
}
6. 删除table
@Test
public void dropTable(){
   
    try {
   
        TableName tableName = TableName.valueOf("ns1:emp");
        if(admin.tableExists(tableName)){
   
            if(!admin.isTableDisabled(tableName)){
   
                //先禁用表
                admin.disableTable(tableName);
            }
            //删除表
            admin.deleteTable(tableName);
        }
    } catch (IOException e) {
   
        e.printStackTrace();
    }
}

Table_CRUD(DML+DQL)

1. Junit执行代码模板
public class TableCRUDHandler {
   
    private Table table;
    @Before
    public void getAdmin(){
   
        table = HbaseUtil.getTable("ns1:emp");
    }
    @After
    public void close(){
   
        HbaseUtil.closeTable(table);
    }
}
2. 向table中添加数据:put
@Test
public void putData(){
   
    try {
   
        //1. 获取Put对象,指定rowkey
        Put put = new Put(Bytes.toBytes("rk00001"));
        //2. 指定列族名,列名,列值
        put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("name"),Bytes.toBytes("zhangfei"));
        put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("age"),Bytes.toBytes("15"));
        put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("gender"),Bytes.toBytes("m"));
        //3. 提交
        table.put(put);
    } catch (IOException e) {
   
        e.printStackTrace();
    }
}
3. 批量增加数据
@Test
public void putData2(){
   
    List<Put> list = new ArrayList<>();
    try {
   
        Put put1 = new Put(Bytes.toBytes("rk00002"));
        put1.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("name"),Bytes.toBytes("zhenji"));
        put1.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("age"),Bytes.toBytes("23"));
        put1.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("gender"),Bytes.toBytes("f"));

        Put put2 = new Put(Bytes.toBytes("rk00003"));
        put2.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("name"),Bytes.toBytes("zhaoyun"));
        put2.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("age"),Bytes.toBytes("25"));
        put2.addColumn(Bytes.toBytes("f1"
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值