Hbase JAVA API 增删改查操作

I、 创建maven项目

一、IDEA 2022.2.2版本

在这里插入图片描述

请添加图片描述

二、IDEA 2022 以前的版本

在这里插入图片描述
在这里插入图片描述

II、pom.xml添加依赖

一、Maven仓库地址

https://mvnrepository.com/

二、搜索hbase会出来很多hbase的依赖

在这里插入图片描述

三、选择hbase-client, 2.2.4版本,点进去复制依赖代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>2.2.4</version>
</dependency>
四、添加到pom的《dependencies》《/dependencies》中,等待下载不报红

在这里插入图片描述

五、若不自动下载,可以右键然后

在这里插入图片描述

III、 项目详情

一、创建表格

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.security.access.Permission;

import java.io.IOException;
import java.util.Scanner;

public class Create_Table {
    
    

    public static void main(String[] args) throws IOException {
    
    
 		//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件
        Configuration con = new Configuration();
        //conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xml
        con.set("hbase.zookeeper.quorum","niit01");
        //设置访问用户root
        System.setProperty("HADOOP_USER_NAME", "root");
		//Connection类创建连接,传入con对象参数实现hbase连接
        Connection conn = ConnectionFactory.createConnection(con);
        //Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象admin
        Admin admin = conn.getAdmin();
        //控制台提示输入表格名
        System.out.println("Enter the table name:");
        //控制台扫描提取输入的表格名
        Scanner sc = new Scanner(System.in);
        //将读取的表格名存入对象tb_name,String类型
        String tb_name= sc.next();
        //TableDescriptorBuilder 类 用于列族创建和定义,tdb为对象,TableName.valueOf(tb_name)传入刚才定义的表格名字参数
        TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(TableName.valueOf(tb_name));
        //使用etColumnFamily方法,以及TableDescriptorBuilder下的ColumnFamilyDescriptorBuilder实例来添加和定义列族
        //此处分别为Per_Info,Edu_Info两个列族
        tdb.setColumnFamily(ColumnFamilyDescriptorBuilder.of("Per_Info")).build();
        tdb.setColumnFamily(ColumnFamilyDescriptorBuilder.of("Edu_Info")).build();
        //使用 Admin类 admin对象 createTable方法,将tdb里的表格名+列族名参数传入,表格创建完毕
        admin.createTable(tdb.build());
        //控制台打印提示创建成功
        System.out.println("Table created successfully");
        //使用 Admin类 admin对象 close方法关闭hbase连接
        admin.close();
    }

}

二、表格失效
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;
import java.util.Scanner;

public class Disable_Table {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件
        Configuration con = new Configuration();
        //conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xml
        con.set("hbase.zookeeper.quorum","niit01");
        //设置访问用户root
        System.setProperty("HADOOP_USER_NAME", "root");
		//Connection类创建连接,传入con对象参数实现hbase连接
        Connection conn = ConnectionFactory.createConnection(con);
        //Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象admin
        Admin admin = conn.getAdmin();
        //控制台提示输入表格名
        System.out.println("Enter the table Name:");
        //控制台扫描提取输入的表格名
        Scanner sc = new Scanner(System.in);
         //将读取的表格名存入对象tb_name,String类型
        String tb_name = sc.next();
        //使用 Admin类 admin对象 isTableDisabled方法查看表格失效情况,并将结果存入对象isDisable,类型为布尔类型
        Boolean isDisabled = admin.isTableDisabled(TableName.valueOf(tb_name));
        //如果表格有效
        if(isDisabled==false)
        //则提示表格是有效的
            System.out.println("Table is Enabled");
        //如果表格失效
        else
        //则提示表格是失效的
            System.out.println("Table is Disabled");
        //如果表格有效
        if(!isDisabled)
        {
    
    
        //使用 Admin类 admin对象 disabTable方法,传入表格名参数将表格失效
            admin.disableTable(TableName.valueOf(tb_name));
        //控制台提示表格失效成功
            System.out.println("Table is Disabled now");
        }
    }
}

三、删除表格
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;
import java.util.Scanner;

public class Drop_table {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件
        Configuration con = new Configuration();
        //conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xml
        con.set("hbase.zookeeper.quorum","niit01");
        //设置访问用户root
        System.setProperty("HADOOP_USER_NAME", "root");
		//Connection类创建连接,传入con对象参数实现hbase连接
        Connection conn = ConnectionFactory.createConnection(con);
        //Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象admin
        Admin admin = conn.getAdmin();
        //控制台提示输入表格名
        System.out.println("Enter the table Name:");
        //控制台扫描提取输入的表格名
        Scanner sc = new Scanner(System.in);
        //将读取的表格名存入对象tb_name,String类型
        String tb_name = sc.next();
        //使用 Admin类 admin对象 isTableDisabled方法查看表格失效情况,并将结果存入对象isDisable,类型为布尔类型
        Boolean isDisabled = admin.isTableDisabled(TableName.valueOf(tb_name));
		//如果表格为有效状态
        if(isDisabled==false) {
    
    
        //使用 Admin类 admin对象 disableTable方法将表格失效
            admin.disableTable(TableName.valueOf(tb_name));
        //使用 Admin类 admin对象 deleteTable方法将表格删除
            admin.deleteTable(TableName.valueOf(tb_name));
        }
        //如果表格为失效状态
        else
        //使用 Admin类 admin对象 deleteTable方法将表格删除
            admin.deleteTable(TableName.valueOf(tb_name));
        //控制台打印提示表格成功删除
        System.out.println("Table Dropped successfuly");
        //关闭admin表格管理
        admin.close();
        //关闭hbase连接
        conn.close();
    }
}

四、删除数据
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.Scanner;

public class Delete_Data {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件
        Configuration con = new Configuration();
        //conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xml
        con.set("hbase.zookeeper.quorum","niit01");
        //设置访问用户root
        System.setProperty("HADOOP_USER_NAME", "root");
		//Connection类创建连接,传入con对象参数实现hbase连接
        Connection conn = ConnectionFactory.createConnection(con);
        //Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象admin
        Admin admin = conn.getAdmin();
        //控制台提示输入表格名
        System.out.println("Enter the table Name:");
        //控制台扫描提取输入的表格名
        Scanner sc = new Scanner(System.in);
        //将读取的表格名存入对象tb_name,String类型
        String tb_name = sc.next();
        //Table 类 用于表格数据更改 table对象,表格名称数据参数传入
        Table table = conn.getTable(TableName.valueOf(tb_name));
        //控制台提示(“请输入行键”)
        System.out.println("Enter the row key:");
        //将输入的数字读入 rk 对象,String类型
        String rk = sc.next();
        //Delete 类用于删除 del对象 Hbase中数据都是字节类型,所以要将刚才的行键转化为字节类型,并存入del对象
        Delete del = new Delete(Bytes.toBytes(rk));
        //使用 Delete 类 del对象 addColumn方法 设置要删除的列族的列,都要转成字节类型操作
        //此处删除某一行的cf2列族,degree列,如果你的表格没有,请根据自己的表格格式更改
        del.addColumn(Bytes.toBytes("cf2"),Bytes.toBytes("degree"));
        //使用 Table类 table对象 delete方法 传入del对象包含的表格名行键列族名列名参数,删除表格数据
        table.delete(del);
        //控制台提示删除数据成功
        System.out.println("Data Deleted Successfully");
        //table表格更改关闭
        table.close();
        //连接hbase关闭
        conn.close();



    }
}

五、删除多个数据 使用List数组
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class List_Delete {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件
        Configuration con = new Configuration();
        //conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xml
        con.set("hbase.zookeeper.quorum","niit01");
        //设置访问用户root
        System.setProperty("HADOOP_USER_NAME", "root");
		//Connection类创建连接,传入con对象参数实现hbase连接
        Connection conn = ConnectionFactory.createConnection(con);
        //Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象admin
        Admin admin = conn.getAdmin();
        //控制台提示输入表格名
        System.out.println("Enter the table Name:");
        //控制台扫描提取输入的表格名
        Scanner sc = new Scanner(System.in);
        //将读取的表格名存入对象tb_name,String类型
        String tb_name = sc.next();
        //Table 类 用于表格数据更改 table对象,表格名称数据参数传入
        Table table = conn.getTable(TableName.valueOf(tb_name));
        //Delete 类, 设置删除行键为1, 存入del1对象
        Delete del1 = new Delete(Bytes.toBytes("1"));
        //使用 Delete类 del1对象 addColumn方法 设置列族为cf1,列为age
        del1.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("age"));
        //Delete 类, 设置删除行键为12, 存入del2对象
        Delete del2 = new Delete(Bytes.toBytes("12"));
        //使用 Delete类 del2对象 addColumn方法 设置列族为cf1,列为name
        del1.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"));
        //Delete 类, 设置删除行键为4, 存入del3对象
        Delete del3 = new Delete(Bytes.toBytes("4"));
        //使用 Delete类 del3对象 addColumn方法 设置列族为cf1,列为name
        del1.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"));
        //List类 创建一个数组类型的Delete,对象list
        List<Delete> list = new ArrayList<Delete>();
        //使用List类,list对象,add方法,将del1 del2 del3参数传入数组
        list.add(del1);
        list.add(del2);
        list.add(del3);
        //使用Table类 table对象 delete方法,传入list对象参数,删除数组数据,即三个表格数据同时删除
        table.delete(list);
        //控制台打印数据删除成功提示
        System.out.println("Data Deleted Successfully");
        //关闭更改表格
        table.close();
        //关闭hbase连接
        conn.close();
    }
}

六、插入数据
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.Scanner;

public class Insert_Data {
    
    
    public static void main(String[] args) throws IOException {
    
    
    	//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件
        Configuration con = new Configuration();
        //conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xml
        con.set("hbase.zookeeper.quorum","niit01");
        //设置访问用户root
        System.setProperty("HADOOP_USER_NAME", "root");
		//Connection类创建连接,传入con对象参数实现hbase连接
        Connection conn = ConnectionFactory.createConnection(con);
        //Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象admin
        Admin admin = conn.getAdmin();
        //控制台提示输入表格名
        System.out.println("Enter the table Name:");
        //控制台扫描提取输入的表格名
        Scanner sc = new Scanner(System.in);
        //将读取的表格名存入变量tb_name,String类型
        String tb_name = sc.next();
        //Table 类 用于表格数据更改 table对象,表格名称数据参数传入
        Table table = conn.getTable(TableName.valueOf(tb_name));
        //控制台提示输入插入数据的行键
        System.out.println("Enter the row key:");
        //读取的行间数据放入rk这个变量,String类型
        String rk = sc.next();
        //Put 类 用于数据插入,将rk行键参数传入 p对象, 全部转化为字节类型
        Put p = new Put(Bytes.toBytes(rk));
        //使用 Put类 p对象 addColumn方法插入具体数据,第一个为列族,第二个为列,第三个为值,全部转化为字节类型
        p.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("Lily"));
        p.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("age"),Bytes.toBytes("20"));
        p.addColumn(Bytes.toBytes("cf2"),Bytes.toBytes("degree"),Bytes.toBytes("MBA"));
        //使用Table类 table对象 put方法,传入参数p,包含表格名,列族,列,值
        table.put(p);
        //控制台提示插入数据成功
        System.out.println("Data inserted successfully");
        //关闭表格更改
        table.close();
        //关闭hbase链接
        conn.close();

    }
}
七、插入多个数据,使用List数组
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class List_Insert {
    
    
    public static void main(String[] args) throws IOException {
    
    
       //实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件
        Configuration con = new Configuration();
        //conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xml
        con.set("hbase.zookeeper.quorum","niit01");
        //设置访问用户root
        System.setProperty("HADOOP_USER_NAME", "root");
		//Connection类创建连接,传入con对象参数实现hbase连接
        Connection conn = ConnectionFactory.createConnection(con);
        //控制台提示输入表格名
        System.out.println("Enter the table Name:");
        //控制台扫描提取输入的表格名
        Scanner sc = new Scanner(System.in);
        //将读取的表格名存入变量tb_name,String类型
        String tb_name = sc.next();
        //Table 类 用于表格数据更改 table对象,表格名称数据参数传入
        Table table = conn.getTable(TableName.valueOf(tb_name));
        //使用 Put 类 p1对象插入行键为7,列族为cf1,列为name,值为Miry
        Put p1 = new Put(Bytes.toBytes("7"));
        p1.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("Miry"));
        //使用 Put 类 p2对象插入行键为8,列族为cf1,列为name,值为Peter
        Put p2 = new Put(Bytes.toBytes("8"));
        p2.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("Peter"));
        //使用 Put 类 p3对象插入行键为9,列族为cf1,列为name,值为Mike
        Put p3 = new Put(Bytes.toBytes("9"));
        p3.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("Mike"));
        //List类 创建一个数组类型的Put,对象list
        List<Put> list = new ArrayList<Put>();
        //使用List类,list对象,add方法,将p1,p2,p3 参数传入数组
        list.add(p1);
        list.add(p2);
        list.add(p3);
        //使用Table类 table对象 put方法插入数据至表格,参数为list
        table.put(list);
        //控制台提示数据插入成功
        System.out.println("Data inserted successfully");
        //关闭表格更改
        table.close();
        //关闭hbase链接
        conn.close();

    }
}

八、读取数据GET
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.Scanner;

public class ReadData_GET {
    
    
    public static void main(String[] args) throws IOException {
    
    
       //实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件
        Configuration con = new Configuration();
        //conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xml
        con.set("hbase.zookeeper.quorum","niit01");
        //设置访问用户root
        System.setProperty("HADOOP_USER_NAME", "root");
		//Connection类创建连接,传入con对象参数实现hbase连接
        Connection conn = ConnectionFactory.createConnection(con);
        //控制台提示输入表格名
        System.out.println("Enter the table Name:");
        //控制台扫描提取输入的表格名
        Scanner sc = new Scanner(System.in);
        //将读取的表格名存入变量tb_name,String类型
        String tb_name = sc.next();
        //Table 类 用于表格数据更改 table对象,表格名称数据参数传入
        Table table = conn.getTable(TableName.valueOf(tb_name));
        //控制台提示输入行键
        System.out.println("Enter the row key:");
        //提取的行键数据存入rk变量
        String rk = sc.next();
        //Get 类 g对象 用于hbase表格数据提取,传入参数行键rk,存入对象g
        Get g = new Get(Bytes.toBytes(rk));
        //Result 类 result对象 用于结果返回提取,传入参数对象g,存入result对象
        Result result = table.get(g);
        //通过 Result类 result对象 getValue方法 提取列族和列名,都是字节类型
        byte[] name = result.getValue(Bytes.toBytes("cf1"),Bytes.toBytes("name"));
        byte[] age = result.getValue(Bytes.toBytes("cf1"),Bytes.toBytes("age"));
        byte[] degree = result.getValue(Bytes.toBytes("cf2"),Bytes.toBytes("degree"));
        //控制台提示输出转化为String类型的对应数据
        System.out.println("Name = "+Bytes.toString(name));
        System.out.println("Age = "+Bytes.toString(age));
        System.out.println("Degree = "+Bytes.toString(degree));
        //关闭表格更改
        table.close();
        //关闭hbase链接
        conn.close();
    }
}

八、读取数据SCAN
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.List;
import java.util.Scanner;

public class ReadData_SCAN {
    
    
    public static void main(String[] args) throws IOException {
    
    
       //实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件
        Configuration con = new Configuration();
        //conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xml
        con.set("hbase.zookeeper.quorum","niit01");
        //设置访问用户root
        System.setProperty("HADOOP_USER_NAME", "root");
		//Connection类创建连接,传入con对象参数实现hbase连接
        Connection conn = ConnectionFactory.createConnection(con);
        //控制台提示输入表格名
        System.out.println("Enter the table Name:");
        //控制台扫描提取输入的表格名
        Scanner sc = new Scanner(System.in);
        //将读取的表格名存入变量tb_name,String类型
        String tb_name = sc.next();
        //Table 类 用于表格数据更改 table对象,表格名称数据参数传入
        Table table = conn.getTable(TableName.valueOf(tb_name));
        //Scan类 scan对象 用于表格所有数据扫描读取
        Scan scan = new Scan();
        //使用Scan 类 scan对象 addColumn方法,读取某一列,比如下面的cf1列族,name列
        scan.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"));
        //Table类 table对象 getScanner方法得到scan的所有字节数据,将其保存到 ResultScanner 类 scanner对象中
        //ResultScanner 类 scanner对象作用是可以扫描具体单元格数据
        ResultScanner scanner = table.getScanner(scan);
        //使用for循环,循环条件为result!=null结果不为空 循环内容为result=scanner.next()数据扫描
        //将循环的结果存入Result result =scanner.next() Result类 result对象中
        for(Result result =scanner.next();result!=null;result=scanner.next())
        {
    
    
        //将循环的数据存入数组,Cell类 用于单元格操作
            List<Cell> list= result.getColumnCells(Bytes.toBytes("cf1"),Bytes.toBytes("name"));
            //循环将数据打印至控制台,将list里数组逐个循环到 Cell类 cell对象中保存
            for(Cell cell : list)
            {
    
    
            //控制台打印数据,将cell数据通过CellUtil.cloneValue方法提取后转化为String类型
                System.out.println(Bytes.toString(CellUtil.cloneValue(cell)));
            }
        }
        //关闭表格更改
        table.close();
        //关闭hbase链接
        conn.close();
    }
}

猜你喜欢

转载自blog.csdn.net/agatha_aggie/article/details/127358700