I、 创建maven项目
一、IDEA 2022.2.2版本
二、IDEA 2022 以前的版本
II、pom.xml添加依赖
一、Maven仓库地址
二、搜索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();
}
}