HBase API基本操作

本文详细介绍了如何使用HBase API进行操作,包括创建表、插入数据、按rowkey查询、范围查找、全表扫描、删除记录以及删除表等核心步骤,是HBase操作的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在HBase中创建一张表

	/**
     * 在HBase中创建一张表
     * @throws IOException
	*/
    @Test
	public void createTable() throws IOException {
		Configuration conf = new Configuration();
        // 访问zookeeer端口
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        // 访问zookeeper节点ip
        conf.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");

        // 创建连接对象
        Connection connection = ConnectionFactory.createConnection(conf);
        // 获取连接对象,创建一张表
        // 获取管理员对象,来对数据库进行DDL操作
        Admin admin = connection.getAdmin();
        // 指定表名
        TableName myuser = TableName.valueOf("myuser");
        HTableDescriptor hTableDescriptor = new HTableDescriptor(myuser);
        // 指定两个列族
        HColumnDescriptor cf1 = new HColumnDescriptor("cf1");
        HColumnDescriptor cf2 = new HColumnDescriptor("cf2");

        hTableDescriptor.addFamily(cf1);
        hTableDescriptor.addFamily(cf2);

        admin.createTable(hTableDescriptor);
        admin.close();
        connection.close();
	}

2、向HBase的一张表中插入一条数据

	/**
     * 向HBase中的myuser表插入一条数据
     * @throws IOException
     */
    @Test
    public void insertData() throws IOException {
        Configuration conf = new Configuration();
        // 设置zookeeper的连接端口及IP
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");

        // 获取连接
        Connection connection = ConnectionFactory.createConnection(conf);
        // 获取插入数据的目标表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        // 实例Put对象并指定rowkey
        Put put = new Put(Bytes.toBytes("rk001"));
        put.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("name"), Bytes.toBytes("zhangsan"));

        myuser.put(put);
        connection.close();
    }

3、初始化一批数据到HBase的一张表中

	/**
     * 初始化一批数据到HBase当中
     * @throws IOException
     */
    @Test
    public void insertBatchData() throws IOException {
        Configuration configuration = new Configuration();
        // 设置访问zookeeper的连接端口及IP
        configuration.set("hbase.zookeeper.property.clientPort", "2181");
        configuration.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");

        // 获取连接
        Connection connection = ConnectionFactory.createConnection(configuration);
        // 获取插入目标表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        List<Put> putList = new ArrayList<>();

        // 实例多个Put并指定rowkey
        Put put1 = new Put(Bytes.toBytes("rk001"));
        put1.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("age"), Bytes.toBytes(20));
        put1.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("sex"), Bytes.toBytes("男"));

        Put put2 = new Put(Bytes.toBytes("rk002"));
        put2.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("id"), Bytes.toBytes("2"));
        put2.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("name"), Bytes.toBytes("lisi"));
        put2.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("sex"), Bytes.toBytes("女"));
        put2.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("age"), Bytes.toBytes(30));

        putList.add(put1);
        putList.add(put2);

        myuser.put(putList);
        connection.close();
    }

4、指定rowkey获取信息

4.1、通过rowkey进行查询获取所有列的所有值

	/**
     * 根据指定rowkey获取数据
     * @throws IOException
     */
    @Test
    public void searchByRowkey() throws IOException {
        Configuration conf = new Configuration();
        // 设置访问zookeeper的端口及IP
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");

        // 获取连接
        Connection connection = ConnectionFactory.createConnection(conf);
        // 获取查询目标表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        // 实例Get对象,指定rowkey
        Get get = new Get(Bytes.toBytes("rk001"));
        Result result = myuser.get(get);
        Cell[] cells = result.rawCells();

        for (Cell cell : cells) {
            // 获取列族
            System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)));
            // 获取列字段
            System.out.println(Bytes.toString(CellUtil.cloneQualifier(cell)));
            // 获取rowkey
            System.out.println(Bytes.toString(CellUtil.cloneRow(cell)));
            // 获取值
            System.out.println(Bytes.toString(CellUtil.cloneValue(cell)));
        }
        myuser.close();
        connection.close();
    }

4.2、按照rowkey获取指定列族下指定列的值

	/**
     * 通过指定rowkey获取指定列族下的指定列的信息
     * @throws IOException
     */
    @Test
    public void searchByRowkeyGetColumnVal() throws IOException {
        Configuration conf = new Configuration();
        // 设置zookeeper访问端口及IP
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");

        // 获取连接
        Connection connection = ConnectionFactory.createConnection(conf);
        // 获取到表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        // 实例Get对象,并指定rowkey
        Get get = new Get(Bytes.toBytes("rk002"));
        get.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("id"));

        Result result = myuser.get(get);
        Cell[] cells = result.rawCells();
        for (Cell cell : cells) {
            System.out.println(Bytes.toString(CellUtil.cloneValue(cell)));
            System.out.println(Bytes.toString(CellUtil.cloneRow(cell)));
            System.out.println(Bytes.toString(CellUtil.cloneQualifier(cell)));
            System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)));
        }

        myuser.close();
        connection.close();
    }

5、通过startrow和stoprow范围查找

    /**
     * 通过startrow和stoprow范围查找
     * 包含startrow,不包含stoprow
     * @throws IOException
     */
    @Test
    public void searchRange() throws IOException {
        Configuration conf = new Configuration();
        // 配置访问zookeeper端口及IP
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");

        // 获取连接
        Connection connection = ConnectionFactory.createConnection(conf);
        // 获取表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));

        // 实例一个Scan对象
        Scan scan = new Scan();
        scan.setStartRow(Bytes.toBytes("rk001"));
        scan.setStopRow(Bytes.toBytes("rk003"));

        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            System.out.println(Bytes.toString(result.getRow()));
            System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("cf1"), Bytes.toBytes("name"))));
        }
        myuser.close();
        connection.close();
    }

6、通过Scan进行全表扫描

    /**
     * 通过Scan对象全表扫描
     * @throws IOException
     */
    @Test
    public void seachByScan() throws IOException {
        Configuration configuration = new Configuration();
        // 设置访问zookeeper端口及IP
        configuration.set("hbase.zookepper.property.clientPort", "2181");
        configuration.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");

        // 获取连接
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table myuser = connection.getTable(TableName.valueOf("myuser"));

        Scan scan = new Scan();
        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("cf1"), Bytes.toBytes("name"))));
            System.out.println(Bytes.toString(result.getRow()));
        }

        myuser.close();
        connection.close();
    }

7、指定rowkey删除一条记录

	/**
     * 根据指定的rowkey删除一条数据
     * @throws IOException
     */
    @Test
    public void deleteByRowkey() throws IOException {
        Configuration configuration = new Configuration();
        // 设置访问zookeeper的端口及IP
        configuration.set("hbase.zookeeper.property.clientPort", "2181");
        configuration.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");

        // 获取连接
        Connection connection = ConnectionFactory.createConnection(configuration);
        // 获取表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        Delete delete = new Delete("rk001".getBytes());
        myuser.delete(delete);

        myuser.close();
        connection.close();
    }

8、删除表

	/**
     * 删除表操作
     * @throws IOException
     */
    @Test
    public void deleteTable() throws IOException {
        Configuration configuration = new Configuration();
        // 设置访问zookeeper的端口和IP
        configuration.set("hbase.zookeeper.property.clientPort", "2181");
        configuration.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");

        // 获取连接
        Connection connection = ConnectionFactory.createConnection(configuration);
        Admin admin = connection.getAdmin();
        TableName myuser = TableName.valueOf("myuser");
        admin.disableTable(myuser);
        admin.deleteTable(myuser);

        admin.close();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值