HBase详解(04) - HBase Java API使用
HBase详解(04) - HBase Java API使用
环境准备
新建Maven项目,在pom.xml中添加依赖
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>2.0.5</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.0.5</version> </dependency> |
DDL 库表的操作
- 创建HBase_DDL类
package com.zhangjk.HBase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
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 org.junit.Test;
import java.io.IOException;
public class HBase_DDL {
}
- 判断表是否存在
//判断表是否存在
public static boolean isTableExist(String tableName) throws IOException {
//1.创建配置信息并配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
//2.获取与HBase的连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取DDL操作对象
Admin admin = connection.getAdmin();
//4.判断表是否存在操作
boolean exists = admin.tableExists(TableName.valueOf(tableName));
//5.关闭连接
admin.close();
connection.close();
//6.返回结果
return exists;
}
@Test
public void isTableExist() throws IOException {
boolean b = isTableExist("student");
System.out.println(b);
}
- 创建表
//创建表
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("需要创建的表已存在!");
return;
}
//3.创建配置信息并配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
//4.获取与HBase的连接
Connection connection = ConnectionFactory.createConnection(configuration);
//5.获取DDL操作对象
Admin admin = connection.getAdmin();
//6.创建表描述器构造器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
//7.循环添加列族信息
for (String cf : cfs) {
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(cf));
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
}
//8.执行创建表的操作
admin.createTable(tableDescriptorBuilder.build());
//9.关闭资源
admin.close();
connection.close();
}
@Test
public void createTable() throws IOException {
createTable("student1","info1", "info2");
}
- 删除表
//删除表
public static void dropTable(String tableName) throws IOException {
//1.判断表是否存在
if (!isTableExist(tableName)) {
System.out.println("需要删除的表不存在!");
return;
}
//2.创建配置信息并配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
//3.获取与HBase的连接
Connection connection = ConnectionFactory.createConnection(configuration);
//4.获取DDL操作对象
Admin admin = connection.getAdmin();
//5.使表下线
TableName name = TableName.valueOf(tableName);
admin.disableTable(name);
//6.执行删除表操作
admin.deleteTable(name);
//7.关闭资源
admin.close();
connection.close();
}
@Test
public void dropTable() throws IOException {
dropTable("student1");
}
- 创建命名空间
//创建命名空间
public static void createNameSpace(String ns) throws IOException {
//1.创建配置信息并配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
//2.获取与HBase的连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取DDL操作对象
Admin admin = connection.getAdmin();
//4.创建命名空间描述器
NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(ns).build();
//5.执行创建命名空间操作
try {
admin.createNamespace(namespaceDescriptor);
} catch (NamespaceExistException e) {
System.out.println("命名空间已存在!");
} catch (Exception e) {
e.printStackTrace();
}
//6.关闭连接
admin.close();
connection.close();
}
@Test
public void createNameSpace() throws IOException {
createNameSpace("test1");
}
DML 增删改查
- 创建类HBase_DML
- 插入数据
//插入数据
//tableName 表名
//rowKey 主键
//cf 列族名
//字段名称
//需要添加到值
public static void putData(String tableName, String rowKey, String cf, String cn, String value) throws IOException {
//1.获取配置信息并设置连接参数
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
//2.获取连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取表的连接
Table table = connection.getTable(TableName.valueOf(tableName));
//4.创建Put对象
Put put = new Put(Bytes.toBytes(rowKey));
//5.放入数据
put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn), Bytes.toBytes(value));
//6.执行插入数据操作
table.put(put);
//7.关闭连接
table.close();
connection.close();
}
@Test
public void putData() throws IOException {
String tableName = "student1";
String rowKey = "001";
String cf = "info1";
String cn = "name";
String value = "zhangshan";
putData(tableName, rowKey, cf, cn, value);
}
- 单条数据查询(GET)
//单条数据查询(GET)
public static void getDate(String tableName, String rowKey, String cf, String cn) throws IOException {
//1.获取配置信息并设置连接参数
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
//2.获取连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取表的连接
Table table = connection.getTable(TableName.valueOf(tableName));
//4.创建Get对象
Get get = new Get(Bytes.toBytes(rowKey));
// 指定列族查询
// get.addFamily(Bytes.toBytes(cf));
// 指定列族:列查询
// get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));
//5.查询数据
Result result = table.get(get);
//6.解析result
for (Cell cell : result.rawCells()) {
System.out.println("ROW:" + Bytes.toString(CellUtil.cloneRow(cell)) +
" CF:" + Bytes.toString(CellUtil.cloneFamily(cell)) +
" CL:" + Bytes.toString(CellUtil.cloneQualifier(cell)) +
" VALUE:" + Bytes.toString(CellUtil.cloneValue(cell)));
}
//7.关闭连接
table.close();
connection.close();
}
@Test
public void getDate() throws IOException {
String tableName = "student1";
String rowKey = "001";
String cf = "info1";
String cn = "name";
getDate(tableName, rowKey, cf, cn);
}
- 扫描数据(Scan)
//扫描数据(Scan)
public static void scanTable(String tableName) throws IOException {
//1.获取配置信息并设置连接参数
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
//2.获取连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取表的连接
Table table = connection.getTable(TableName.valueOf(tableName));
//4.创建Scan对象
Scan scan = new Scan();
//5.扫描数据
ResultScanner results = table.getScanner(scan);
//6.解析results
for (Result result : results) {
for (Cell cell : result.rawCells()) {
System.out.println(
Bytes.toString(CellUtil.cloneRow(cell))+":"+
Bytes.toString(CellUtil.cloneFamily(cell))+":" +
Bytes.toString(CellUtil.cloneQualifier(cell)) +":" +
Bytes.toString(CellUtil.cloneValue(cell))
);
}
}
//7.关闭资源
table.close();
connection.close();
}
@Test
public void scanTable() throws IOException {
scanTable("student1");
}
- 删除数据
//删除数据
public static void deletaData(String tableName, String rowKey, String cf, String cn) throws IOException {
//1.获取配置信息并设置连接参数
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
//2.获取连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取表的连接
Table table = connection.getTable(TableName.valueOf(tableName));
//4.创建Delete对象
Delete delete = new Delete(Bytes.toBytes(rowKey));
// 指定列族删除数据
// delete.addFamily(Bytes.toBytes(cf));
// 指定列族:列删除数据(所有版本)
// delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));
// 指定列族:列删除数据(指定版本)
// delete.addColumns(Bytes.toBytes(cf), Bytes.toBytes(cn));
//5.执行删除数据操作
table.delete(delete);
//6.关闭资源
table.close();
connection.close();
}
@Test
public void deletaData() throws IOException {
String tableName = "student1";
String rowKey = "001";
String cf = "info1";
String cn = "name";
deletaData(tableName, rowKey, cf, cn);
}
本文作者:莲藕淹,转载请注明原文链接:https://www.cnblogs.com/meanshift/p/15834432.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY