当前位置: 首页 > article >正文

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 适合存储大规模、稀疏的非结构化数据,能够很好地支持实时读写操作。


http://www.kler.cn/a/301350.html

相关文章:

  • 八、系统托盘与配置面板
  • 单片机-定时器中断
  • 在 RT-Thread 上使用单色屏 UI 库 - U8G2
  • 【Shiro】Shiro 的学习教程(四)之 SpringBoot 集成 Shiro 原理
  • 海外云手机是否适合运营TikTok?
  • Kubernetes部署(haproxy+keepalived)高可用环境和办公网络打通
  • Java 21的Preferences API的笔记
  • 分布式中间件-几个常用的消息中间件
  • redis基本数据结构-hash
  • 数据分析-11-时间序列分析的概念任务和主要方法
  • 第R2周:LSTM-火灾温度预测
  • C语言——希尔排序
  • Qt什么时候触发paintEvent事件
  • 【论文笔记】NDT: Neural Data Transformers (NBDT, 2022)
  • 一些深度学习相关指令
  • 【Qt】按钮样式--按钮内部布局(调整按钮文本和图标放置在任意位置)
  • 上海亚商投顾:沪指探底回升 华为产业链午后爆发
  • 【深度学习讲解笔记】第1章-机器学习基础(3)
  • Oracle Data Guard:Oracle数据库的高可用性和灾难恢复解决方案
  • 最近试用了FunHPC-AI宝箱-ComfyUI-Plus,使用了dreamshaperXL全能模型,生成了几张国风图,效果真的让人惊叹!
  • 安装MongoDB
  • 企业数字化转型、建设和升级面临的主要难题和解决之道(2)