📜  HBase-概述(1)

📅  最后修改于: 2023-12-03 15:15:29.066000             🧑  作者: Mango

HBase-概述

HBase是一个分布式的、面向列的NoSQL数据库,它基于Google的Bigtable的设计思想。它支持大规模的结构化数据存储,并具有高可靠性、高可扩展性、高性能等优点。HBase通常用于云计算、大数据、实时数据分析等领域。

特点
  • 列式存储:HBase采用列式存储方式,可以支持非常大的表和非常稀疏的数据
  • 分布式:HBase可以很容易地实现分布式存储和处理,支持水平扩展
  • 高可靠性:HBase采用Hadoop HDFS的文件系统,具有高可靠性和容错能力
  • 高性能:HBase采用了批处理技术和缓存机制,可以实现高效的数据读写
架构

HBase的架构包括客户端、RegionServer、HMaster、ZooKeeper等组件。

  • 客户端:提供API接口,用于向HBase发送读写请求
  • RegionServer:存储和处理数据的节点,每个RegionServer负责若干个Region的管理
  • HMaster:负责管理RegionServer并维护系统元数据
  • ZooKeeper:协调分布式节点之间的通信和数据同步

HBase架构图

数据模型

HBase的数据模型与关系型数据库有所不同,它以行键(Row Key)、列族(Column Family)和列名(Column Name)为基本单位。每个行键对应多个列族,每个列族对应多个列名和对应的值。

数据在HBase中存储的格式如下:

<Row Key> => {<Column Family>:<Column Name> => <Value>}
API

HBase提供了Java API,可以通过Java代码来操作HBase数据库。以下是一些常用的API操作:

// 创建一张表
HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("student"));
tableDescriptor.addFamily(new HColumnDescriptor("basic"));
tableDescriptor.addFamily(new HColumnDescriptor("score"));
admin.createTable(tableDescriptor);

// 插入数据
Put put = new Put(Bytes.toBytes("Tom"));
put.addColumn(Bytes.toBytes("basic"), Bytes.toBytes("name"), Bytes.toBytes("Tom"));
put.addColumn(Bytes.toBytes("basic"), Bytes.toBytes("age"), Bytes.toBytes("18"));
put.addColumn(Bytes.toBytes("score"), Bytes.toBytes("math"), Bytes.toBytes("90"));
put.addColumn(Bytes.toBytes("score"), Bytes.toBytes("english"), Bytes.toBytes("80"));
table.put(put);

// 查询数据
Get get = new Get(Bytes.toBytes("Tom"));
get.addColumn(Bytes.toBytes("score"), Bytes.toBytes("math"));
Result result = table.get(get);
byte[] math = result.getValue(Bytes.toBytes("score"), Bytes.toBytes("math"));
System.out.println("math score: " + Bytes.toString(math));
总结

HBase是一个强大的分布式NoSQL数据库,具有高可靠性、高可扩展性、高性能等优点,是处理大数据的有力工具。