HBase 原理

HBase:

HBase 简介:

​ HBase 是一个分布式的、面向列的开源数据库,它是一个适合于非结构化数据存储的数据库。HBase 基于列的而不是基于行的模式。

​ 大:上亿行、百万列

​ 面向列:面向列的存储和权限控制,列独立检索

​ 稀疏:对于为空的列,并不占用存储空间,因此,表设计得非常的稀疏

HBase 角色:

HMaster

功能

​ 1、监控 RegionServer

​ 2、处理 RegionServer 故障转移

​ 3、处理元数据的变更

​ 4、处理 region 得分配或移除

​ 5、在空闲时间进行数据的负载均衡

​ 6、通过 Zookeeper 发布自己的位置给客户端、

HRegionServer

功能

​ 1、负责存储 HBase 的实际数据

​ 2、处理分配给它的 Region

​ 3、刷新缓存到 HDFS

​ 4、维护 HLog

​ 5、执行压缩

​ 6、负责处理 Region 分片

组件

​ 1、Write-Ahead logs

​ HBase 的修改记录,当对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。

​ 但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入内存中。

​ 所以在系统出现故障的时候,数据可以通过这个日志文件重建。

注:这样可以防止写入内存的数据丢失。

​ 2、HFile

​ 这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。

​ 3、Store

​ HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个列簇。

​ 4、MenStore

​ 顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在 WAL 中字后,RegionServer 会在内存中存储键值对。

​ 5、Region

​ HBase 表的分片,HBase 表会根据 RowKey 值被切分成不同的 region 存储在 RegionServer 中,在一个 RegionServer 中可以有多个不同的 region。

HBase 架构:

​ 一个 RegionServer 可以包含多个 HRegion,每个 RegionServer 维护一个 HLog,和多个 HFile 以及其对应的 MemStore。RegionServer 运行在 NameNode 上,HMaster 运行在 NameNode 上,数量可以与 DataNode 数量一致。
在这里插入图片描述

HBase 数据模型:

在这里插入图片描述
​ 确定一个单元格的位置(cell),需要如下四个:

​ rowkey + Clume Family + Colume + timestamp(版本 时间戳),数据有版本的概念,即一个单元格可能有多个值,但是只有最新的一个对外显示。

  • HBase 中有两张特殊的 Table,-ROOT- 和 .META.

  • .META.:记录了用户表的 Region 信息,.META. 可以有多个 region

  • -ROOT-:记录了 .META. 表的 Region 信息,-ROOT- 只有一个 Region

  • Zookeeper 中记录了 -ROOT- 表的 locaton

  • Client 访问用户数据之前需要首先访问 zookeeper,人后访问 -ROOT- 表,接着访问 .META. 表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过 client 端会做 cache 缓存,注意:在 0.96 版本后,Hbase 移除了 -ROOT- 表。

    Row Key:行键,Table 的主键,Table 中的记录默认按照 Row Key 升序排序

    Timestamp:时间戳,每次数据操作对应的时间戳,可以看作是数据的 version number(版本号)

    Column Family

    ​ 列簇,Table 在水平方向有一个或者多个Column Family 组成,一个 Column Family 中可以由任意多个 Column 组成,即 Column Family 支持动态扩展,无需预先定义 Column 的数量以及类型,所有 Column 均以二进制格式存储,用户需要自行进行类型转换。

    Table & Region

    ​ 当 Table 随着记录数不断增加而变大后,会逐渐分裂成多份 splits,成为 regions,一个 region 由[starkey,endkey)表示,不同的 region 会被 Master 分配给相应的 RegionServer 进行管理:

    HMaster

    ​ HMaster 没有单点问题,HBase 中可以启动多个 HMaster,通过 Zookeeper 的 Master Election 机制保证总有一个 Master 运行,HMaster 在功能上主要负责 Table 和 Region 的管理工作:

    ​ 1、管理用户对 Table 的增、删、改、查操作

    ​ 2、管理 HRegionServer 的负载均衡,调整 Region 分布

    ​ 3、在 Region Split 后,负责新 Region 的分配

    ​ 4、在 HRegionServer 停机后,负责失效 HRegionServer 上的 Region 迁移

    HRegionServer

    ​ HRegionServer 内部管理了一系列 HRegion 对象,每个 HRegion 对应了 Table 中的一个 Region ,HRegion 中由多个 HStore 组成。**每个 HStore 对应了 Table 中的一个 Column Family **的存储,可以看出每个 Column Family 其实就是一个集中的存储单元,因此最好将具备共同 IO 特性的 column 放在一个 Column Family 中,这样最高效。

    MemStore & StoreFiles

    ​ HStore 存储是 HBase 存储的核心了,其中由两部分组成,一部分是 MemStore,一部分是 StoreFiles。MemStore 是 Sorted Memory Buffer,用户写入的数据首先会放入 MemStore,当 MemStore 满了以后会 Flush 成一个 StoreFile(底层实现是 HFile),当 StoreFile 文件数量增长到一定阈值,会触发 Compact 合并操作,将多个 StoreFiles 合并成一个 StoreFile ,合并过程中会进行版本合并和数据删除,因此可以看出 HBase 其实只有增加数据,所有的更新和删除操作都是在后续的 compact 过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了 HBase I/O 的高性能。当 StoreFiles Compact 后,会逐步形成越来越大的 StoreFile,当单个 StoreFile 大小超过一定阈值后,会触发 Split 操作,同时把当前 Region Split 成 2 个 Region,父 Region 会下线,新 Split 出的2个孩子 Region 会被 HMaster 分配到相应的 HRegionServer 上,使得原先 1 个 Region 的压力得以分流到 2 个 Region 上。

    HLog

    ​ 每个 HRegionServer 中都有一个 HLog 对象,HLog 是一个实现 Write-Ahead Log 的类,在每次用户操作写入 MemStore 的同时,也会写一份数据到 HLog 文件中,HLog 文件定期会滚动出新的,并删除旧的文件(已持久化到 StoreFile 中的数据)。当 HRegionServer 意外终止后,HMaster 会通过 Zookeeper 感知到,HMaster 首先会处理遗留的 HLog 文件,将其中不同 Region 的 Log 数据进行拆分,分别放到相应 region 的目录下,然后再将失效的 region 重新分配,领取到这些 region 的 HRegionServer 在 Load Region 的过程中,会发现有历史 HLog 需要处理,因此会 Replay HLog 中的数据到 MemStore 中,然后 flush 到 StoreFiles,完成数据恢复

    文件类型

    ​ HBase 中的所有数据文件都存储在 Hadoop HDFS 文件系统上,主要包括上述提出的两种文件类型:

    ​ 1、HFile, HBase 中 KeyValue 数据的存储格式,HFile 是 Hadoop 的二进制格式文件,实际上 StoreFile 就是对HFile 做了轻量级包装,即 StoreFile 底层就是 HFile。

    ​ 2、HLog File,HBase 中 WAL(Write Ahead Log) 的存储格式,物理上是 Hadoop 的 Sequence File。

Zookeeper中hbase的节点的存储信息:

​ rs:regionserver节点信息

​ table-lock:hbase的除meta以外的所有表

​ Table:的所有的表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值