Hbase RegionServer的核心模块

RegionServer是HBase系统中最核心的组件,主要负责用户数据写入、读取等基础操作。RegionServer组件实际上是一个综合体系,包含多个各司其职的核心模块:HLog、MemStore、HFile以及BlockCache。

一、RegionServer内部结构

RegionServer是HBase系统响应用户读写请求的工作节点组件,由多个核心模块组成。
在这里插入图片描述
一个RegionServer由一个(或多个)HLog、一个BlockCache以及多个Region组成。其中,HLog用来保证数据写入的可靠性;BlockCache可以将数据块缓存在内存中以提升数据读取性能;Region是HBase中数据表的一个数据分片,一个RegionServer上通常会负责多个Region的数据读写。一个Region由多个Store组成,每个Store存放对应列簇的数据,比如一个表中有两个列簇,这个表的所有Region就都会包含两个Store。每个Store包含一个MemStore和多个HFile,用户数据写入时会将对应列簇数据写入相应的MemStore,一旦写入数据的内存大小超过设定阈值,系统就会将MemStore中的数据落盘形成HFile文件。HFile存放在HDFS上,是一种定制化格式的数据存储文件,方便用户进行数据读取。

二、HLog

HBase中系统故障恢复以及主从复制都基于HLog实现。默认情况下,所有写入操作(写入、更新以及删除)的数据都先以追加形式写入HLog,再写入MemStore。大多数情况下,HLog并不会被读取,但如果RegionServer在某些异常情况下发生宕机,此时已经写入MemStore中但尚未flush到磁盘的数据就会丢失,需要回放HLog补救丢失的数据。此外,HBase主从复制需要主集群将HLog日志发送给从集群,从集群在本地执行回放操作,完成集群之间的数据复制。

1,HLog文件结构

在这里插入图片描述
(1)每个RegionServer拥有一个或多个HLog(默认只有1个,1.1版本可以开启MultiWAL功能,允许多个HLog)。每个HLog是多个Region共享的,图5-2中Region A、Region B和Region C共享一个HLog文件。
(2)HLog中,日志单元WALEntry(图中小方框)表示一次行级更新的最小追加单元,它由HLogKey和WALEdit两部分组成,其中HLogKey由table name、region name以及sequenceid等字段构成。

WALEdit用来表示一个事务中的更新集合,在0.94之前的版本中,如果一个事务对一行row R三列c1、c2、c3分别做了修改,那么
HLog中会有3个对应的日志片段,如下所示:

<logseq1-for-edit1>:<keyvalue-for-edit-c1>
<logseq2-for-edit2>:<keyvalue-for-edit-c2>
<logseq3-for-edit3>:<keyvalue-for-edit-c3>

然而,这种日志结构无法保证行级事务的原子性,假如RegionServer更新c2列之后发生宕机,那么一行记录中只有部分数据写入成功。为了解决这样的问题,HBase将一个行级事务的写入操作表示为一条记录,如下所示:

<logseq#-for-entire-txn>:<WALEdit-for-entire-txn>

其中,WALEdit会被序列化为格式<-1,#of edits,,,>,比如<-1,3,,,>,-1为标识符,表示这种新的日志结构。

2,HLog文件存储

HBase中所有数据(包括HLog以及用户实际数据)都存储在HDFS的指定目录(假设为hbase-root)下,可以通过hadoop命令查看hbase-root目录下与HLog有关的子目录,如下所示:

drwxr-xr-x   - hadoop hadoop          0 2017-09-21 17:12 /hbase/WALs
drwxr-xr-x   - hadoop hadoop          0 2017-09-22 06:52 /hbase/oldWALs

其中,/hbase/WALs存储当前还未过期的日志;/hbase/oldWALs存储已经过期的日志。可以进一步查看/hbase/WALs目录下的日志文件,如下所示:

/hbase/WALs/hbase17.xj.bjbj.org,60020,1505980274300
/hbase/WALs/hbase18.xj.bjbj.org,60020,1505962561368
/hbase/WALs/hbase19.xj.bjbj.org
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓之以理的喵~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值