HBase基础知识

HBase是一个高可靠,高性能,面向列,可伸缩的分布式存储数据库,设计目标是用来解决关系型数据库在处理海量存储时的限制性。

1 架构

HBase是分布式系统,所以分布式系统中的Master与Slave/Worker时少不了的,在这里Master叫HMaster,Worker在这里叫HRegionServer。

1.1 HRegionServer

RegionServer是HBase的数据服务进程,负责处理用户的数据读写请求。
HBase中的表按照key值划分为一个个的子表,以实现分布式存储,这些子表在HBase中称之为Region。为了在诸多Region中查询数据,每个Region都有Rowkey的起止范围,一个Region的EndKey正好是下一个Region的Startkey。Region构成了HBase分布式存储的基本单元。
Region的管理由HRegionServer负责。用户所有与数据表的交互最终都是与Region打交道。
Region分为Meta Region及User Region,前者中存储每个User Region的路由信息。为了读写时寻找到真正的User Region,都是要先找到Meta Region地址,再从其中获取User Region的地址。

1.2 HMaster

HBase的Master负责管理RegionServer,包括:
1. 新RegionServer的注册
2. RegionServer Failover处理
3. 创建修改删除表及集群操作
4. Region的分配,转移,负载均衡及RegionServer挂掉后的Region接管

1.3 zookeeper

zookeeper在分布式系统中提供了分布式锁机制及事件监听机制,也可以作为一个小的数据存储查询系统。通过分布式锁机制,某约定节点仅有一个节点能够写成功,可以利用这种特性达到分布式选主的功能。分布式节点也可监听zk中某节点,第一时间获悉其变化,从而触发再次选举等操作。分布式节点可以注册自己信息到zk中,从而体现为一个小型的存储系统,可以实现信息注册查询的功能。
在HBase中zookeeper担负着多Master节点时的选主,备节点的事件监听,节点信息的注册查询等。具体如:
1. RegionServer向zk注册,从而可以通过zk获取每个RegionServer的在线状态
2. HMaster启动时将HBase的-ROOT-表的存储信息加载到zk中/hbase/root-region-server, 以便hbase的locateRegion路由可以由确定的地方去查询.Meta. 的RegionServer信息。

2. 存储

2.1 存储结构

HBase是基于BigTable的面向列的分布式存储系统,其存储设计是基于Memtable / SSTable设计的,主要分为两部分,一部分为内存中的MemStore (Memtable),另外一部分为磁盘上的HFile (SSTable)。还有就是存储WAL的log,主要实现类为HLog.

存储模型结构由大到小依次为:Region->store->memstore/storefile->Hfile->cell(key->value).

2.5.1 Region
Region是HBase数据存储和管理的基本单位, 一个表中可以包含一个或多个Region。数据在行的层面按照Rowkey范围划分为了不同的Region,Region由RegionServer进行管理。
在列的纵向层面可按照列存储数据内容的用途等划分为不同的ColumnFamily,CF是一系列Column的集合,是Region中物理存储的基本单元。CF是表级别的概念,每个Region都有相同的CF信息。每个Region只能被一个RS(RegionServer)提供服务,RS可以同时服务多个Region,来自不同RS上的Region组合成表格的整体逻辑视图。
这里写图片描述

  • Store
    一个Region由一个或多个Store组成,每个Store对应图2中的一个Column Family。

  • MemStore
    一个Store包含一个MemStore,MemStore缓存客户端向Region插入的数据,当RegionServer中的MemStore大小达到配置的容量上限时,RegionServer会将MemStore中的数据“flush”到HDFS中。

  • StoreFile
    MemStore的数据flush到HDFS后成为StoreFile,随着数据的插入,一个Store会产生多个StoreFile,当StoreFile的个数达到配置的最大值时,RegionServer会将多个StoreFile合并为一个大的StoreFile。

  • HFile
    HFile定义了StoreFile在文件系统中的存储格式,它是当前HBase系统中StoreFile的具体实现。

  • HLog
    HLog日志保证了当RegionServer故障的情况下用户写入的数据不丢失,RegionServer的多个Region共享一个相同的HLog。

HBase的底层数据存储采用key-value结构存储,key中包含了RowKey,ColumnFamily,ColumnQualifier,Timestamp,KeyType等信息,对变长的还在固定位置有其长度字段
这里写图片描述
Value区则存储具体的该rowkey,该CF,该Col的特定时间戳版本的值。

对于这种存储方式,每个cell都需要附加一堆坐标信息,但是好处是对于非常稀疏的表,如共有数万列但每条记录仅有少数列有效的情况则可大大减少存储空间。

hbase用该cell的时间戳作为版本,使得一列可以存储多个版本,此时间戳可以系统自己设置,也可用户明确赋值。为了减少保存无数版本的浪费,在创建表时有参数可以指定最少保留的版本数VERSIONS,也可通过TTL指明该列族数据的存活时间,超过这个时间的数据将被只保留MIN_VERSION个版本的数据,如果MIN_VERSION为0则全部删除。

3.HBase读写

3.1 Client读写

Client发起写请求=>Zoopeeper获得文件的存储位置信息=>根据位置信息读写对应的HregionServer=>先写Hlog中=>再写MemStore中=>返回写成功

Client发起读请求=>Zoopeeper获得文件的存储位置信息=>根据位置信息读写对应的HregionServer=>先读MemStore=>再读HLog=>返回读取的数据。

数据在更新时首先写入Log(WAL log)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并 且将老的MemStore添加到flush队列,由单独的线程flush到磁盘上,成为一个StoreFile。于此同时,系统会在zookeeper中 记录一个redo point,表示这个时刻之前的变更已经持久化了。(minor compact)

当系统出现意外时,可能导致内存(MemStore)中的数据丢失,此时使用Log(WAL log)来恢复checkpoint之后的数据。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值