hbase(5)---API示例

本文详细介绍HBase数据库的各种操作,包括连接配置、表的创建与管理、数据的增删查改等核心功能,适用于HBase初学者及开发者快速上手。

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

package com.wzy.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Test;

import java.io.IOException;

public class HbaseTest {
    private static final String ZK_CONNECT_KEY="hbase.zookeeper.quorum";
    private static final String ZK_CONNECT_VALUE="172.10.0.11:2181,172.10.0.12:2181,172.10.0.21:2181,172.10.0.22:2181,172.10.0.23:2181";
    private static Connection conn=null;
    private static Admin admin=null;

    /**
     * 获得连接
     * */
    public static Connection getConn(){
        //创建一个可以用来管理hbase配置信息的conf对象
        Configuration conf=HBaseConfiguration.create();
        //设置当前的程序去寻找hbase在哪里
        conf.set(ZK_CONNECT_KEY,ZK_CONNECT_VALUE);
        conf.set("zookeeper.znode.parent","/hbase");
        //创建连接对象
        try {
            conn= ConnectionFactory.createConnection(conf);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return conn;
    }
    /**
     * 获得管理员对象
     * */
    public static Admin getAdmin(){
        try {
            admin=conn.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return admin;
    }

    /**
     * 通过表名和列簇创建表 (表必须包含表名称和列簇)
     * */
    public void createTable(String tableName,String[] family) throws IOException {
        TableName tbName= TableName.valueOf(tableName);
        //创建表前,先判断表是否存在
        if(admin.tableExists(tbName)){
            //表存在
            System.out.println(tbName+"表已经存在");
        }else{
            //表不存在
            //通过表名称创建列簇
            HTableDescriptor htd=new HTableDescriptor(tbName);
            //向列簇中添加列的信息
            for(String str:family){
                HColumnDescriptor hcd=new HColumnDescriptor(str);
                //向表中填充列簇
                htd.addFamily(hcd);
            }
            //创建表
            admin.createTable(htd);
            //判断表是否创建成功
            if(admin.tableExists(tbName)){
                System.out.println(tbName+"表创建成功");
            }else{
                System.out.println(tbName+"表创建失败");
            }
        }
    }

    /**
     * 查询所有的表
     * */
    public void getAllTables() throws IOException {
        //获取列簇的描述信息
        HTableDescriptor[] htds=admin.listTables();
        //遍历列簇描述信息
        for(HTableDescriptor htd:htds){
            //转化为名
            String tbName=htd.getNameAsString();
            //获取列的描述信息
            HColumnDescriptor[] hcds=htd.getColumnFamilies();
            System.out.println("表名称"+tbName);
            //遍历列簇
            for(HColumnDescriptor hcd:hcds){
                //获取列簇的名字
                String columnFamilyName=hcd.getNameAsString();
                System.out.println("\t"+"列簇的名字:"+columnFamilyName);
            }
        }
    }

    /**
     * 查询表的列簇属性
     * */
    public void descTable(String tableName) throws IOException {
        //转化表名称
        TableName tbName=TableName.valueOf(tableName);
        //判断表是否存在
        if(admin.tableExists(tbName)){
            //表存在
            //获取列簇的描述信息
            HTableDescriptor htd=admin.getTableDescriptor(tbName);
            //获取列簇中列的信息
            HColumnDescriptor[] hcds=htd.getColumnFamilies();
            //遍历列
            for(HColumnDescriptor columnFamily:hcds){
                System.out.println(columnFamily);
            }
        }else{
            //表不存在
            System.out.println(tbName+"表不存在");
        }
    }

    /**
     * 删除表,先disabled停用表
     * */
    public void disableTable(String tabName) throws IOException {
        TableName tbName=TableName.valueOf(tabName);
        //判断表是否存在
        if(admin.tableExists(tbName)){
            //存在,再判断表是否停用
            if(admin.isTableEnabled(tbName)){
                admin.disableTable(tbName); //停用表
            }else{
                System.out.println(tbName+"不是活动状态");
            }

        }else{
            System.out.println(tbName+"表不存在");
        }
    }
    /**
     * 删除表
     * */
    public void dropTable(String tableName) throws IOException {
        //转化表名称
        TableName tbName=TableName.valueOf(tableName);
        //判断表是否存在
        if(admin.tableExists(tbName)){
            //判断表是否停用
            boolean tabStatus=admin.isTableEnabled(tbName);
            if(tabStatus){
                //使表变成不可用状态
                admin.disableTable(tbName);
            }
            //删除表
            admin.deleteTable(tbName);
            //删除后,再次判断表是否存在
            if(admin.tableExists(tbName)){
                System.out.println("删除失败");
            }else{
                System.out.println("删除成功");
            }
        }else{
            System.out.println(tbName+"表不存在");
        }
    }

    /**
     * 修改表,通过表名称
     * */
    public void updateTable(String tableName) throws IOException {
        //转化为表名称
        TableName tbName=TableName.valueOf(tableName);
        //判断要修改的表是否存在
        if(admin.tableExists(tbName)){
            //表存在,判断表是否启用
            //表的可用状态
            boolean tabEnabled=admin.isTableEnabled(tbName);
            if(tabEnabled){
                //使表变为不可用
                admin.disableTable(tbName);
            }
            //根据表名称得到表
            HTableDescriptor htd=admin.getTableDescriptor(tbName);
            //创建列簇结构对象,添加列
            HColumnDescriptor columnFamily1=new HColumnDescriptor("cf1".getBytes());
            HColumnDescriptor columnFamily2=new HColumnDescriptor("cf2".getBytes());
            htd.addFamily(columnFamily1);
            htd.addFamily(columnFamily2);
            //修改列簇
            admin.modifyTable(tbName,htd);
        }else{
            System.out.println(tbName+"表不存在");
        }
    }

    /**
     * 添加数据
     * */
    public void putData(String tableName,String rowKey,String familyName,String columnName,String value) throws IOException {
        //转化为表名
        TableName tbName=TableName.valueOf(tableName);
        //添加数据之前,判断表是否存在,不存在的话就先创建表
        if(admin.tableExists(tbName)){

        }else{
            //根据表名称创建表结构
            HTableDescriptor htd=new HTableDescriptor(tbName);
            //定义列簇的名字
            HColumnDescriptor columnFamilyName=new HColumnDescriptor(familyName);
            htd.addFamily(columnFamilyName);
            admin.createTable(htd);
        }
        Table table=conn.getTable(tbName);
        Put put=new Put(rowKey.getBytes());

        put.addColumn(familyName.getBytes(),columnName.getBytes(),value.getBytes());
        table.put(put);
    }

    /**
     * sacn全表数据
     * */
    public ResultScanner getResultScan(String tableName) throws IOException {
        ResultScanner result;
        TableName tbName=TableName.valueOf(tableName);
        //判断表是否存在
        if(admin.tableExists(tbName)){
            Table table=conn.getTable(tbName);
            Scan scan=new Scan();
            result=table.getScanner(scan);
            for(Result rs:result){
                for(KeyValue kv:rs.list()){
                    System.out.println(Bytes.toString(kv.getRow()));
                    System.out.println(Bytes.toString(kv.getFamily()));
                    System.out.println(Bytes.toString(kv.getQualifier()));
                    System.out.println(Bytes.toString(kv.getValue()));
                    System.out.println(kv.getTimestamp());

                }
            }
        }else{
            result=null;
        }
        System.out.println(result.toString());
        return result;
    }

    /**
     * 根据rowkey查询数据
     * */
    public Result getResult(String tableName,String rowKey) throws IOException {
        Result result;
        TableName tbName=TableName.valueOf(tableName);
        if(admin.tableExists(tbName)){
            Table table=conn.getTable(tbName);
            Get get=new Get(rowKey.getBytes());
            result=table.get(get);
        }else{
            result=null;
        }
        return result;
    }

    /**
     * 删除数据
     * */
    public void deleteColumn(String tableName,String rowKey) throws IOException {
        TableName tbName=TableName.valueOf(tableName);
        if(admin.tableExists(tbName)){
            Table table=conn.getTable(tbName);
            Delete delete=new Delete(rowKey.getBytes());
            table.delete(delete);
        }else{
            System.out.println(tbName+"表不存在");
        }
    }
    @Test
    public void test() throws IOException {
        System.out.println("开始测试");
        getConn();
        getAdmin();
        HbaseTest hdemo=new HbaseTest();
        //创建表
        //hdemo.createTable("student",new String[]{"base_info","address_info"});

        //测试查询所有表
        //hdemo.getAllTables();

        //查询表的列簇属性
        //hdemo.descTable("student");

        //删除表
        //hdemo.dropTable("student");

        //修改tableName的所有列簇,将列簇修改为cf1和cf2
        //hdemo.updateTable("student");

        //向表中插入数据
        //String tableName,String rowKey,String familyName,String columnName,String value
        //hdemo.putData("student","rowKey01","cf1","username","张三");

        //查询所有数据
        hdemo.getResultScan("student");
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值