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

hbase

三、HBase的数据模型:一种全新的视角
HBase的数据模型与我们熟悉的关系型数据库有很大不同,可以概括为“多维排序映射表”。
概念 解释 类比
表(Table) 数据的集合。 一张Excel表格。
行键(Row Key) 表的“主键”,唯一标识一行,按字典序排序。设计好坏直接决定性能! Excel中的行号,但它是字符串且有序。
列族(Column Family) 一组列的集合,是物理存储和权限控制的最小单位。必须在建表时定义。 将相关的列(如info:name, info:email)分组。
列限定符(Qualifier) 列族下的具体列,可以动态添加。 info列族下的name和email。
时间戳(Timestamp) 每个单元格(Cell)数据的版本标识。HBase默认会保留多个版本。 数据的“修改时间”。
单元格(Cell) 由{Row Key, Column Family:Qualifier, Timestamp}唯一确定的实际数据值。 表格中的一个具体格子里的值。
一个数据的访问路径可以表示为:
Table -> Row Key -> Column Family -> Column Qualifier -> Timestamp -> Value

四、快速上手:一个Java API示例
下面是一个使用Java API连接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 HBaseDemo {

public static void main(String[] args) throws IOException {// 1. 配置并创建连接Configuration config = HBaseConfiguration.create();config.set("hbase.zookeeper.quorum", "your-zk-node1,your-zk-node2"); // 替换为你的ZooKeeper地址try (Connection connection = ConnectionFactory.createConnection(config);Admin admin = connection.getAdmin()) {TableName tableName = TableName.valueOf("blog_user");String columnFamily = "info";// 2. 创建表if (!admin.tableExists(tableName)) {HTableDescriptor table = new HTableDescriptor(tableName);table.addFamily(new HColumnDescriptor(columnFamily));admin.createTable(table);System.out.println("表创建成功!");}// 3. 插入数据try (Table table = connection.getTable(tableName)) {Put put = new Put(Bytes.toBytes("rowkey1")); // 指定行键put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes("name"), Bytes.toBytes("张三"));put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes("age"), Bytes.toBytes("25"));table.put(put);System.out.println("数据插入成功!");}// 4. 读取数据try (Table table = connection.getTable(tableName)) {Get get = new Get(Bytes.toBytes("rowkey1"));Result result = table.get(get);byte[] nameValue = result.getValue(Bytes.toBytes(columnFamily), Bytes.toBytes("name"));byte[] ageValue = result.getValue(Bytes.toBytes(columnFamily), Bytes.toBytes("age"));System.out.println("Name: " + Bytes.toString(nameValue));System.out.println("Age: " + Bytes.toString(ageValue));}// 5. 扫描数据(获取多行)try (Table table = connection.getTable(tableName);ResultScanner scanner = table.getScanner(new Scan())) {for (Result result : scanner) {// 处理每一行数据System.out.println("Found row: " + result);}}}
}

}
五、总结:HBase的优势与挑战
优势:
极强的可扩展性:轻松横向扩展,应对数据增长。
高吞吐量与低延迟:适合实时读写大量数据。
强大的容错性:基于HDFS,数据自动冗余,节点故障无碍。
灵活的数据模型:支持半结构化和稀疏数据。
挑战与注意事项:
不支持SQL事务:不支持复杂的跨行事务和关联查询(JOIN)。
行键设计至关重要:糟糕的行键设计会导致“热点”问题,严重影响性能。
运维复杂度高:需要维护HDFS、ZooKeeper和HBase本身,对运维团队要求较高。
结语
HBase作为大数据生态中不可或缺的一员,为处理海量数据提供了强有力的支持。它可能不是所有场景的银弹,但在需要存储和随机访问超大规模数据集的领域(如监控、推荐系统、风控等),它无疑是一个经过大规模实践检验的、极为可靠的选择。

http://www.hskmm.com/?act=detail&tid=34494

相关文章:

  • 微信小程序 在云函数本地调试时,总是提示node modules 未安装,立即安装。解决方法
  • Godot-C#场景之间的切换
  • 读书日记1
  • 【ARM CoreLink 系列 3.1 -- CCI-500 详细介绍 -上半部】
  • 央企程序员AI创业一个月感受 ✨
  • tryhackme-预安全-网络基础知识-局域网介绍-05
  • 10.19
  • 从众多知识汲取一星半点也能受益匪浅【day16(2025.10.18)】(加班但只加到四点半)
  • (个人思考)游戏技能的实现
  • 模拟赛T4 分析
  • ubuntu系统中containerd的cni网络配置
  • 十月阅读笔记
  • #20232408 2025-2026-1 《网络与系统攻防技术》实验二实验报告 - 20232408
  • 题解:P2672 [NOIP 2015 普及组] 推销员
  • 一文读懂Schnorr签名
  • 如何选择合适的SAP实施公司?3步锁定靠谱的SAP服务商
  • CSP-S2024
  • 10/19
  • 论DCT和IDCT的重要性,汇编SIMD版第一,此贴第二,就是这么狂 :-)
  • 这些SAP实施公司哪家强?国内比较好的SAP实施商推荐
  • 25秋周总结5
  • UML图
  • 博士研究文档管理技术指南
  • 题解:P12128 [蓝桥杯 2024 省 B 第二场] 质数变革
  • 题解:P12003 在小小的奶龙山里面挖呀挖呀挖(加强版)
  • apisix升级完整流程
  • 10.11-10.18 一周总结
  • 10/19/2025 一周总结
  • 如何生成逼真的合成表格数据:独立采样与关联建模方法对比
  • winform+Task+async