您的位置:首页 > 房产 > 家装 > Hbase的简单使用示例

Hbase的简单使用示例

2024/10/6 6:02:13 来源:https://blog.csdn.net/Casual_Lei/article/details/142034127  浏览:    关键词:Hbase的简单使用示例

HBase 是基于 Hadoop HDFS 构建的分布式、列式存储的 NoSQL 数据库,适用于存储和检索超大规模的非结构化数据。它支持随机读写,并且能够处理 PB 级数据。HBase 通常用于实时数据存取场景,与 Hadoop 生态紧密集成。

使用 HBase 的 Java 示例

前置条件
  1. HBase 集群:确保 HBase 集群已经安装并启动。如果没有,你可以通过本地伪分布模式或 Docker 来运行 HBase。
  2. Hadoop 配置:HBase 通常与 Hadoop HDFS 集成,确保正确配置 Hadoop 和 HBase。
  3. 依赖:项目中需要添加 HBase 和 Hadoop 的依赖,下面是 Maven 项目中的依赖配置。
Maven 依赖
<dependencies><!-- HBase Client --><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.4.8</version></dependency><!-- Hadoop Common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.2.2</version></dependency>
</dependencies>

HBase 示例代码

以下是一个简单的 HBase 使用案例,展示如何创建表、插入数据、获取数据和删除数据。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;public class HBaseExample {// HBase 配置private static Configuration config;private static Connection connection;private static Admin admin;public static void main(String[] args) throws IOException {// 初始化 HBase 配置config = HBaseConfiguration.create();config.set("hbase.zookeeper.quorum", "{ZOOKEEPER_HOST}"); // 设置 ZooKeeper 地址config.set("hbase.zookeeper.property.clientPort", "2181"); // 设置 ZooKeeper 端口// 获取 HBase 连接connection = ConnectionFactory.createConnection(config);admin = connection.getAdmin();// 表名与列族名TableName tableName = TableName.valueOf("test_table");String columnFamily = "cf";// 1. 创建表createTable(tableName, columnFamily);// 2. 插入数据insertData(tableName, columnFamily, "row1", "name", "Alice");insertData(tableName, columnFamily, "row1", "age", "30");// 3. 获取数据getData(tableName, columnFamily, "row1", "name");getData(tableName, columnFamily, "row1", "age");// 4. 删除表deleteTable(tableName);// 关闭资源connection.close();}// 创建表private static void createTable(TableName tableName, String columnFamily) throws IOException {if (admin.tableExists(tableName)) {System.out.println("Table already exists.");} else {TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName);ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(columnFamily));tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());admin.createTable(tableDescriptorBuilder.build());System.out.println("Table " + tableName + " created.");}}// 插入数据private static void insertData(TableName tableName, String columnFamily, String rowKey, String qualifier, String value) throws IOException {Table table = connection.getTable(tableName);Put put = new Put(Bytes.toBytes(rowKey));put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(qualifier), Bytes.toBytes(value));table.put(put);System.out.println("Inserted data: " + rowKey + " => " + qualifier + ": " + value);table.close();}// 获取数据private static void getData(TableName tableName, String columnFamily, String rowKey, String qualifier) throws IOException {Table table = connection.getTable(tableName);Get get = new Get(Bytes.toBytes(rowKey));get.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(qualifier));Result result = table.get(get);byte[] value = result.getValue(Bytes.toBytes(columnFamily), Bytes.toBytes(qualifier));if (value != null) {System.out.println("Retrieved data: " + rowKey + " => " + qualifier + ": " + Bytes.toString(value));} else {System.out.println("No data found for row: " + rowKey);}table.close();}// 删除表private static void deleteTable(TableName tableName) throws IOException {if (admin.tableExists(tableName)) {admin.disableTable(tableName);admin.deleteTable(tableName);System.out.println("Table " + tableName + " deleted.");} else {System.out.println("Table " + tableName + " does not exist.");}}
}

代码说明

  1. HBase 配置

    • config.set("hbase.zookeeper.quorum", "{ZOOKEEPER_HOST}"):这里的 {ZOOKEEPER_HOST} 是你 ZooKeeper 服务的主机名或 IP 地址。ZooKeeper 是 HBase 的分布式协调服务,用于管理集群状态。
  2. 表操作

    • 使用 Admin 对象创建和删除表。在创建表时,使用 TableDescriptorBuilderColumnFamilyDescriptorBuilder 定义表和列族。
  3. 插入数据

    • 使用 Put 对象插入数据到指定的行键、列族和列限定符。
  4. 获取数据

    • 使用 Get 对象根据行键和列限定符获取数据。
  5. 删除表

    • 使用 admin.disableTable()admin.deleteTable() 来删除表。

输出结果

运行程序后,你可以看到以下输出(假设表不存在):

Table test_table created.
Inserted data: row1 => name: Alice
Inserted data: row1 => age: 30
Retrieved data: row1 => name: Alice
Retrieved data: row1 => age: 30
Table test_table deleted.

总结

这个简单的 HBase 案例演示了如何在 Java 应用中使用 HBase 进行表的创建、数据插入、数据检索和表的删除操作。HBase 适合存储大规模、稀疏的非结构化数据,能够很好地支持实时读写操作。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com