HBase|idea使用hbase进行简单的DDL增删改查

发布时间 2023-09-15 12:22:18作者: 喝着农药吐泡泡o

老师要测试什么的,所以我想练习一下,顺便记录在博客里,如有错误,敬请指正,谢谢!!!

idea连接hbase

首先确保你可以打开Hbase http://192.168.40.100:16010 查看所有表

 

//导入所需的类和包,包括HBase的相关类

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;

import javax.xml.stream.events.Namespace;
import java.io.IOException;

import static org.checkerframework.checker.units.UnitsTools.h;

/**
 * @BelongsProject: hbase
 * @BelongsPackage: PACKAGE_NAME
 * @Author: yanyanyan
 * @CreateTime: 2023-09-13  20:56
 * @Description: TODO
 * @Version: 1.0
 */
//创建一个名为”TestAPI“的java类
public class TestAPI {
    //    声明一个静态的Connection对象和一个静态的Admin对象,并将其初始化未null
    private static Connection connection = null;
    private static Admin admin = null;

    //在静态块中,创建一个HBase配置对象(Configuration)
    static {
        try {
            Configuration configuration = HBaseConfiguration.create();
//            配置HBase连接的ZooKeeper主机信息,使用了”hadoop100,hadoop101,hadoop102“作为ZooKeeper的主机名
            configuration.set("hbase.zookeeper.quorum", "hadoop100,hadoop101,hadoop102");
//            使用ConnectionFactory.createConnection(configuration)方法基于配置对象创建一个HBase连接(Connection)
            connection = ConnectionFactory.createConnection(configuration);
//            使用connection.getAdmin()方法从连接中获取一个HBase管理客户端(Admin)
            admin = connection.getAdmin();
//            在异常处理块中打印异常的堆栈跟踪信息
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //创建一个函数判断表是否存在,以此证明是否成功连接
    public static boolean isTableExist(String tableName) throws IOException {
        boolean exists = admin.tableExists(TableName.valueOf(tableName));
        return exists;
    }

 


 
//    关闭HBase管理客户端(admin)
    public static void close() {
        if (admin != null) {
            try {
                admin.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        //测试表是否存在
        System.out.println(isTableExist("stu"));
        //关闭资源
        close();
    }
}

返回true,连接成功!

 hbase创建表

    public static void createTable(String tableName,String...cfs) throws IOException {
        //1、判断是否存在列族信息
        if(cfs.length<=0){
            System.out.println("请设置列族信息!");
            return;
        }
        //2、判断表是否存在
        if(isTableExist(tableName)){
            System.out.println(tableName+"表已存在!");
            return;
        }

        //3、创建表描述器
         HTableDescriptor hTableDescriptor=new HTableDescriptor(TableName.valueOf(tableName));

        //4、循环添加列族信息
        for(String cf:cfs) {

            //创建列族描述器
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf);


            //添加具体的列族信息
            hTableDescriptor.addFamily(hColumnDescriptor);
        }
            // 创建表
        admin.createTable(hTableDescriptor);
    }

//创建表测试语句
     System.out.println(isTableExist("stu6"));

createTable("0408:stu5","info1","info2");    
System.out.println(isTableExist("stu6"));
        close();    

可以在测试里面加入stu6,返回false之后再返回true以此证明创表成功!

 

hbase删除表

 public static void dropTable(String tableName) throws IOException {
        //1、判断表是否存在
        if (!isTableExist(tableName)) {
            System.out.println(tableName + "does not exist.");
            return;
        }

        //2、使表下线
        admin.disableTable(TableName.valueOf(tableName));

        //3、删除表
        admin.deleteTable(TableName.valueOf(tableName));

    }
  dropTable("stu6");

测试

 结果正确

 

 

hbase创建命名空间

 //4、创建命名空间
    public static void createNameSpace(String ns) throws IOException {
        //1、创建命名空间描述器
        /*
        通过调用 NamespaceDescriptor.create(ns) 创建一个命名空间描述器
        使用 .build() 方法构建描述器对象。
        */
        NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(ns).build();

        //2、创建命名空间
        try {

            admin.createNamespace(namespaceDescriptor);
            System.out.println(ns + "命名空间创建成功!");
        } catch (NamespaceExistException e) {
            System.out.println(ns + "命名空间已存在!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("111");
    }
createNameSpace("0400");
 

 

 我们在这个命名空间里创建一个stu00表

       createTable("0400:stu00","info1","info2");