本文共 1995 字,大约阅读时间需要 6 分钟。
概念
HBase 是一种分布式、面向列的开源数据库,其核心依赖HDFS、MapReduce和Zookeeper等技术。HDFS负责提供可靠的存储服务,MapReduce负责高效的数据处理,而Zookeeper则保证集群的高可用性和负载均衡。HBase采用列式存储模式,在每个查询中通过列来定义索引,从而实现自动索引化的优势。这种架构使得HBase能够在面对海量数据时,具备高速的存储和读取能力。
列式存储
列式存储的核心优势在于查询的优化。HBase的查询模式是基于列的,这意味着查询时整个数据库都通过列来定位数据。这种模式下,查询效率显著提高,因为系统会自动为每个列建立索引。以下是HBase和传统关系型数据库的对比:(图1显示HBase的列式存储结构,图2显示传统关系型数据库的表结构)
HBase 核心概念
Column Family(列族)
Column Family是HBase中的重要概念,用于划分数据的存储空间。每个列族下可以包含多个列,而HBase表在创建时必须预先定义列族的数量。HBase推荐使用1到3个列族,理由是过多的列族可能导致网络通信的开销增加。在实际应用中,默认使用单个列族已经能够满足大部分场景需求。
Rowkey(行键)
Rowkey在HBase中类似于传统数据库中的主键,用于唯一标识数据行。HBase支持三种基于Rowkey的查询模式: - 单行查询:通过Rowkey直接获取特定行的数据。 - 范围扫描:通过Rowkey的范围查询,获取多行数据。 - 全表扫描:获取表中所有数据。
Region(分区)
Region相当于大型表在HBase中进行分区的思想。通过Rowkey的范围,将数据划分成多个分区(Region),每个Region由不同的RegionServer负责存储和处理。这种机制不仅降低了查询的时延,还提高了系统的扩展性和可用性。
TimeStamp(时间戳)
TimeStamp是HBase支持多版本的关键机制。通过不同的时间戳,HBase可以在同一行的数据中区分不同版本的记录。默认访问最新版本的数据,而用户可以通过指定特定的时间戳来读取历史版本的数据。HBase会自动为每条数据行生成时间戳,确保数据有序排列。
HBase 核心架构
HBase的架构包括以下主要组件:
- Client:负责与HBase进行交互,管理缓存。
- Zookeeper:负责集群的元数据存储、高可用性管理以及RegionServer的监控。
- Master:负责分配Region、处理负载均衡以及Region扩容和拆分。
- RegionServer:执行写读请求,与HDFS交互存储数据。
RegionServer通过Zookeeper获取 META信息,最终定位目标Region所在的服务器。
Region 寻址方式
HBase的Region分布基于Zookeeper的META信息进行管理。客户端通过以下步骤获取数据: 1. 获取目标RegionServer的地址。 2. 刷新缓存的META信息。 3. 直接访问目标RegionServer。
HDFS
作为HBase的底层存储基础,HDFS不仅提供高效的数据存储,还支持HBase的高可用性。通过HDFS,HBase可以在RegionServer故障时,通过HLog恢复数据。
HBase 写入逻辑
HBase的写入流程包括以下步骤:(如图所示) 1. 获取目标RegionServer地址。 2. 通过HLog(HDFS)写入数据日志。 3. 通过MemStore缓存数据(完成之后,会刷盘进入HDFS)。
MemStore 刷盘机制
MemStore用于加速读写,但为了保证系统稳定性,会在内存膨胀到一定比例时或在特定事件触发下,批量刷盘至HDFS。以下是常见的触发条件: - **全局内存控制**:基于内存使用比例触发。 - ** MemStore 达到大小限制**:如128MB。 - **HLog 达到上限**:默认32条。 - **手动触发**:可通过命令强制刷盘。 - **Region 恢复完成后的自动刷盘**:Region故障恢复后会自动刷盘。
HBase VS Cassandra
对比项 | HBase | Cassandra |
语言 | Java | Java |
出发点 | BigTable模型 | BigTable和Dynamo模型 |
许可证 | Apache | Apache |
协议 | HTTP/RESTapi | 自定义(Thrift) |
数据分布 | Region划分 | 一致性哈希(虚拟节点) |
存储目标 | 大文件型数据 | 小文件型数据 |
一致性模型 | 强一致性模型 | 最终一致性(Quorum NRW) |
通过以上对比可以看出,HBase和Cassandra在数据分布方式和一致性模型上各有优势,选择哪种技术最优取决于具体应用场景。
转载地址:http://pmurz.baihongyu.com/