HBaseJavaAPI

1.在pom.xml文件中加入相关依赖

<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.4.6</version>
        </dependency>

2.HBaseJavaAPI操作

(1)连接

//创建配置对象
Configuration conf = HBaseConfiguration,create();
//指定zk集群地址
conf.set("hbase.zookeeper.quorum","master:2181,node1:2181,node2:2181");
//创建与HBase的连接
Connection conn = ConnectionFactory.createConnection(conf);
//创建一个Admin对象
Admin admin = conn.getAdmin();

(2)创建表

 //创建表
    @Test
    public void createTable() throws IOException {
        TableName table = TableName.valueOf("test1");
        //判断test1是否存在,是则删除
        if (admin.tableExists(table)){
            //删除表之前,需要disable关闭表
            admin.disableTable(table);
            admin.deleteTable(table);
        }

        //创建HTableDescriptor对象
        HTableDescriptor test1 = new HTableDescriptor(table);
        //创建HColumnDescriptor对象
        HColumnDescriptor cf1 = new HColumnDescriptor("cf1");
        //设置版本号
        cf1.setMaxVersions(3);

        //添加列簇
        test1.addFamily(cf1);
        //创建表
        admin.createTable(test1);


    }

(3)列出表

//列出所有表
    @Test
    public void listTable() throws IOException {
        TableName[] tableNames = admin.listTableNames();
        for (TableName tableName : tableNames) {
            System.out.println(tableName);
        }

    }

(4)删除表

@Test
    public void dropTable() throws IOException {

        TableName table = TableName.valueOf("testJavaApi");
        //删除表之前,需要disable关闭表
        admin.disableTable(table);
        admin.deleteTable(table);

    }

(5) 修改表

@Test
    public void modifyTable() throws IOException {
        TableName table = TableName.valueOf("test1");
        //创建HTableDescriptor对象
//        HTableDescriptor hTableDescriptor = new HTableDescriptor(table);
        //通过Admin对象去创建HTableDescriptor对象,如果直接通过new方式创建  则获取不到表本身有的结构
        HTableDescriptor hTableDescriptor = admin.getTableDescriptor(table);

      /*  //获取表原有的结构
        for (HColumnDescriptor columnFamily : hTableDescriptor.getColumnFamilies()) {
            System.out.println(columnFamily);
            hTableDescriptor.addFamily(columnFamily);
        }
*/
        //添加列簇cf2
        hTableDescriptor.addFamily(new HColumnDescriptor("cf2"));
        admin.modifyTable(table,hTableDescriptor);

    }

(6)插入数据

@Test
    //插入一条数据
    public void put() throws IOException {
        //获取待插入数据的表
        Table test1 = conn.getTable(TableName.valueOf("test1"));
        Put put = new Put("003".getBytes());
        put.addColumn("cf1".getBytes(),"name".getBytes(),"王五".getBytes());
        put.addColumn("cf1".getBytes(),"age".getBytes(),Bytes.toBytes(20));
        put.addColumn("cf1".getBytes(),"gender".getBytes(),"male".getBytes());
        put.addColumn("cf2".getBytes(),"clazz".getBytes(),"文科一班".getBytes());
        test1.put(put);


    }

(7)获取数据

 @Test
    //通过rowkey获取一条数据
    public void get() throws IOException {
        Table test1 = conn.getTable(TableName.valueOf("test1"));
        Get get = new Get("001".getBytes());

        Result rs = test1.get(get);
        byte[] cf1 = "cf1".getBytes();
        byte[] cf2 = "cf2".getBytes();
        String name = Bytes.toString(rs.getValue(cf1,"name".getBytes()));
        int age = Bytes.toInt(rs.getValue(cf1,"age".getBytes()));
        String gender = Bytes.toString(rs.getValue(cf1,"gender".getBytes()));
        String clazz = Bytes.toString(rs.getValue(cf1,"clazz".getBytes()));
        System.out.println(name+","+age+","+gender+","+clazz);


    }

(8)全表扫描

 @Test
    //指定rk的范围进行scan
    public void scan() throws IOException {
        //连接表
        Table test1 = conn.getTable(TableName.valueOf("test1"));

        Scan scan = new Scan();
        //包含withStartRow  不包含withStopRow
        scan.withStartRow("001".getBytes());
        scan.withStopRow("004".getBytes());
        ResultScanner scanner = test1.getScanner(scan);
        for (Result rs : scanner) {
            //获取rowkey
            String rowkey = Bytes.toString(rs.getRow());
            if ("001".equals(rowkey)|| "002".equals(rowkey)){

                byte[] cf1 = "cf1".getBytes();
                byte[] cf2 = "cf2".getBytes();
                String name = Bytes.toString(rs.getValue(cf1,"name".getBytes()));
                int age = Bytes.toInt(rs.getValue(cf1,"age".getBytes()));
                String gender = Bytes.toString(rs.getValue(cf1,"gender".getBytes()));
                String clazz = Bytes.toString(rs.getValue(cf2,"clazz".getBytes()));
                System.out.println(name+","+age+","+gender+","+clazz);

            }else if("003".equals(rowkey)){
                byte[] cf1 = "cf1".getBytes();
                byte[] cf2 = "cf2".getBytes();
                String name = Bytes.toString(rs.getValue(cf1,"name".getBytes()));
                int age = Bytes.toInt(rs.getValue(cf1,"age".getBytes()));
                String gender = Bytes.toString(rs.getValue(cf1,"gender".getBytes()));
                String clazz = Bytes.toString(rs.getValue(cf2,"clazz".getBytes()));
                System.out.println(name+","+age+","+gender+","+clazz);

            }

        }

    }

(9)关闭连接

@After
    public void close(){
        try {
            admin.close();
            conn.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3.完整代码

public class Demo2HBaseAPI {
    Connection conn = null;
    Admin admin = null;
    @Before
    public void init()  {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum","master:2181,node1:2181,node2:2181");
        try {
            conn = ConnectionFactory.createConnection(conf);
            admin = conn.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //创建表
    @Test
    public void createTable() throws IOException {
        TableName table = TableName.valueOf("test1");
        //判断test1是否存在,是则删除
        if (admin.tableExists(table)){
            //删除表之前,需要disable关闭表
            admin.disableTable(table);
            admin.deleteTable(table);
        }

        //创建HTableDescriptor对象
        HTableDescriptor test1 = new HTableDescriptor(table);
        //创建HColumnDescriptor对象
        HColumnDescriptor cf1 = new HColumnDescriptor("cf1");
        //设置版本号
        cf1.setMaxVersions(3);

        //添加列簇
        test1.addFamily(cf1);
        //创建表
        admin.createTable(test1);


    }

    //列出所有表
    @Test
    public void listTable() throws IOException {
        TableName[] tableNames = admin.listTableNames();
        for (TableName tableName : tableNames) {
            System.out.println(tableName);
        }

    }

    @Test
    public void dropTable() throws IOException {

        TableName table = TableName.valueOf("testJavaApi");
        //删除表之前,需要disable关闭表
        admin.disableTable(table);
        admin.deleteTable(table);

    }

    @Test
    public void modifyTable() throws IOException {
        TableName table = TableName.valueOf("test1");
        //创建HTableDescriptor对象
//        HTableDescriptor hTableDescriptor = new HTableDescriptor(table);
        //通过Admin对象去创建HTableDescriptor对象,如果直接通过new方式创建  则获取不到表本身有的结构
        HTableDescriptor hTableDescriptor = admin.getTableDescriptor(table);
      /*  //获取表原有的结构
        for (HColumnDescriptor columnFamily : hTableDescriptor.getColumnFamilies()) {
            System.out.println(columnFamily);
            hTableDescriptor.addFamily(columnFamily);
        }
*/
        //添加列簇cf2
        hTableDescriptor.addFamily(new HColumnDescriptor("cf2"));
        admin.modifyTable(table,hTableDescriptor);

    }

    @Test
    //插入一条数据
    public void put() throws IOException {
        //获取待插入数据的表
        Table test1 = conn.getTable(TableName.valueOf("test1"));
        Put put = new Put("003".getBytes());
        put.addColumn("cf1".getBytes(),"name".getBytes(),"王五".getBytes());
        put.addColumn("cf1".getBytes(),"age".getBytes(),Bytes.toBytes(20));
        put.addColumn("cf1".getBytes(),"gender".getBytes(),"male".getBytes());
        put.addColumn("cf2".getBytes(),"clazz".getBytes(),"文科一班".getBytes());
        test1.put(put);

    }

    @Test
    //通过rowkey获取一条数据
    public void get() throws IOException {
        Table test1 = conn.getTable(TableName.valueOf("test1"));
        Get get = new Get("001".getBytes());

        Result rs = test1.get(get);
        byte[] cf1 = "cf1".getBytes();
        byte[] cf2 = "cf2".getBytes();
        String name = Bytes.toString(rs.getValue(cf1,"name".getBytes()));
        int age = Bytes.toInt(rs.getValue(cf1,"age".getBytes()));
        String gender = Bytes.toString(rs.getValue(cf1,"gender".getBytes()));
        String clazz = Bytes.toString(rs.getValue(cf1,"clazz".getBytes()));
        System.out.println(name+","+age+","+gender+","+clazz);

    }

    @Test
    //指定rk的范围进行scan
    public void scan() throws IOException {
        //连接表
        Table test1 = conn.getTable(TableName.valueOf("test1"));

        Scan scan = new Scan();
        //包含withStartRow  不包含withStopRow
        scan.withStartRow("001".getBytes());
        scan.withStopRow("004".getBytes());
        ResultScanner scanner = test1.getScanner(scan);
        for (Result rs : scanner) {
            //获取rowkey
            String rowkey = Bytes.toString(rs.getRow());
            if ("001".equals(rowkey)|| "002".equals(rowkey)){

                byte[] cf1 = "cf1".getBytes();
                byte[] cf2 = "cf2".getBytes();
                String name = Bytes.toString(rs.getValue(cf1,"name".getBytes()));
                int age = Bytes.toInt(rs.getValue(cf1,"age".getBytes()));
                String gender = Bytes.toString(rs.getValue(cf1,"gender".getBytes()));
                String clazz = Bytes.toString(rs.getValue(cf2,"clazz".getBytes()));
                System.out.println(name+","+age+","+gender+","+clazz);

            }else if("003".equals(rowkey)){
                byte[] cf1 = "cf1".getBytes();
                byte[] cf2 = "cf2".getBytes();
                String name = Bytes.toString(rs.getValue(cf1,"name".getBytes()));
                int age = Bytes.toInt(rs.getValue(cf1,"age".getBytes()));
                String gender = Bytes.toString(rs.getValue(cf1,"gender".getBytes()));
                String clazz = Bytes.toString(rs.getValue(cf2,"clazz".getBytes()));
                System.out.println(name+","+age+","+gender+","+clazz);

            }

        }

    }
    //使用cellUtil获取数据
    @Test
    public void cellUtil() throws IOException {
        //连接表
        Table test1 = conn.getTable(TableName.valueOf("test1"));

        Scan scan = new Scan();
        //包含withStartRow  不包含withStopRow
        scan.withStartRow("001".getBytes());
        scan.withStopRow("004".getBytes());
        ResultScanner scanner = test1.getScanner(scan);
        for (Result rs : scanner) {
            List<Cell> cells = rs.listCells();
            for (Cell cell : cells) {
                String rowkey = Bytes.toString(CellUtil.cloneRow(cell));
                String cf = Bytes.toString(CellUtil.cloneFamily(cell));
                String qf = Bytes.toString(CellUtil.cloneQualifier(cell));

                String value = null;

                if ("age".equals(qf)){
                    value = Bytes.toInt(CellUtil.cloneValue(cell))+"";
                }else {
                    value = Bytes.toString(CellUtil.cloneValue(cell));
                }

                System.out.println(rowkey+"-->"+cf+"-->"+qf+"-->"+value);



            }
            System.out.println();

        }

    }


    @After
    public void close(){
        try {
            admin.close();
            conn.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值