HBASE物理存储

1 已经提到过,Table中的所有行都按照row key的字典序排列。

2 Table 在行的方向上分割为多个Hregion。

3 region按大小分割的,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,Hregion就会等分会两个新的Hregion。当table中的行不断增多,就会有越来越多的Hregion。

4 Hregion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Hregion可以分布在不同的HRegion server上。但一个Hregion是不会拆分到多个server上的。

5 HRegion虽然是分布式存储的最小单元,但并不是存储的最小单元。

事实上,HRegion由一个或者多个Store组成,每个store保存一个columns family。

每个Strore又由一个memStore和0至多个StoreFile组成。如图:

StoreFile以HFile格式保存在HDFS上。

HFile的格式为:

Trailer部分的格式:

HFile分为六个部分:

Data Block 段–保存表中的数据,这部分可以被压缩

Meta Block 段 (可选的)–保存用户自定义的kv对,可以被压缩。

File Info 段–Hfile的元信息,不被压缩,用户也可以在这一部分添加自己的元信息。

Data Block Index 段–Data Block的索引。每条索引的key是被索引的block的第一条记录的key。

Meta Block Index段 (可选的)–Meta Block的索引。

Trailer–这一段是定长的。保存了每一段的偏移量,读取一个HFile时,会首先读取Trailer,Trailer保存了每个段的起始位置(段的Magic Number用来做安全check),然后,DataBlock Index会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需从内存中找到key所在的block,通过一次磁盘io将整个 block读取到内存中,再找到需要的key。DataBlock Index采用LRU机制淘汰。

HFile的Data Block,Meta Block通常采用压缩方式存储,压缩之后可以大大减少网络IO和磁盘IO,随之而来的开销当然是需要花费cpu进行压缩和解压缩。

目标Hfile的压缩支持两种方式:Gzip,Lzo。

 

HLog(WAL log)

WAL 意为Write ahead log(http://en.wikipedia.org/wiki/Write-ahead_logging),类似mysql中的binlog,用来做灾难恢复只用,Hlog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。

每个Region Server维护一个Hlog,而不是每个Region一个。这样不同region(来自不同table)的日志会混在一起,这样做的目的是不断追加单个文件相对于同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对table的写性能。带来的麻烦是,如果一台region server下线,为了恢复其上的region,需要将region server上的log进行拆分,然后分发到其它region server上进行恢复。

HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括 sequence number和timestamp,timestamp是”写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。HLog Sequece File的Value是HBase的KeyValue对象,即对应HFile中的KeyValue,可参见上文描述。

### HBase存储过程和工作机制 #### 一、HBase 存储过程详解 HBase 基于 LSM (Log-Structured Merge) 树模型实现其高效的写入性能。以下是数据在 HBase 中的存储流程: 1. **客户端请求处理** 当客户端发起写入请求时,数据会被记录到 WAL(Write-Ahead Log),即 HLog 文件中[^1]。这一操作确保即使发生系统崩溃,未持久化的数据也可以通过重放日志的方式恢复。 2. **内存缓冲区 MemStore** 随后,数据被加载至内存中的 MemStore 缓冲区。在此阶段,数据以有序的形式保存以便后续快速写入磁盘[^2]。 3. **刷写到磁盘** 当 MemStore 达到预设阈值时,其中的数据将被刷新并写入磁盘上的 HFile 文件。此过程中,数据按照列族进行物理分区存储,从而优化查询效率[^3]。 4. **压缩与合并** 定期执行 Minor Compaction 和 Major Compaction 来减少过多的小型 HFiles 数量以及清理过期或删除标记的数据项。Major Compaction 默认每七天运行一次[^5]。 #### 二、RegionServer 工作原理 RegionServer 是 HBase 分布式架构的核心组件之一,负责管理分配给它的 Regions 并响应来自用户的读/写请求。 1. **Region 管理** 每个 RegionServer 维护若干个 Regions,而这些 Regions 构成了表的实际存储单位。不同地区的 Regions 能够分布于集群内的各个节点上以达到负载均衡的目的;然而单个 Region 不允许跨多台服务器分割存放。 2. **WAL 日志维护** 所有针对该 RegionServer 下属 Regions 进行的操作均需先行登记至统一的日志文件——HLog 中。正常情况下很少直接访问 HLogs,但在意外停机或者灾难恢复场景下则显得尤为重要。 3. **缓存策略 BlockCache** 为了加速频繁访问的数据检索速度,HBase 实现了一套复杂的缓存体系结构称为 BlockCache。它进一步细分为 three-tiered cache hierarchy 包括 single-access, multi-access 和 in-memory regions,各占据总容量比例分别为 25%, 50% 及剩余部分用于特定需求如全内存模式下的大对象支持等[^4]。 ```python # 示例代码展示如何设置 major compaction 时间间隔配置参数 from hbase import Configuration config = Configuration() config.set('hbase.hregion.majorcompaction', '604800000') # 设置为7天毫秒数 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值