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

}

posted @   莲藕淹  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示