Hbase JAVA API add, delete, modify and query operations

I. Create a maven project

1. IDEA 2022.2.2 version

Insert image description here

Please add image description

2. Versions before IDEA 2022

Insert image description here
Insert image description here

II. Add dependencies to pom.xml

1. Maven warehouse address

https://mvnrepository.com/

2. Searching for hbase will reveal many hbase dependencies.

Insert image description here

3. Select hbase-client, version 2.2.4, click to copy the dependent code

Insert image description here
Insert image description here
Insert image description here

<!-- 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>
4. Add it to the pom's "dependencies" and "/dependencies", and wait for the download to not be reported red.

Insert image description here

5. If it does not download automatically, you can right-click and then

Insert image description here

III. Project details

1. Create a form

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();
    }

}

2. The form is invalid
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");
        }
    }
}

3. Delete the table
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();
    }
}

4. Delete data
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();



    }
}

5. Delete multiple data using List array
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();
    }
}

6. Insert data
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();

    }
}
7. Insert multiple data using List array
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();

    }
}

8. Read data 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();
    }
}

8. Read data 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();
    }
}

Guess you like

Origin blog.csdn.net/agatha_aggie/article/details/127358700