深入探讨HBase

下面介绍一下HBase集群中主要角色的作用:

HMaster

HBase集群的主节点,可以配置多个,用来实现HA,主要作用:

1.为RegionServer分配region

2.负责RegionServer的负载均衡

3.发现失效的RegionServer,重新分配它负责的region

4.hdfs上的垃圾文件回收(标记为删除的且经过major compact的文件)

5.处理schema更新请求

RegionServer(以下简称RS)

HBase集群的从节点,负责数据存储,主要作用:

1.RS维护HMaster分配给它的region,处理对这些region的IO请求

2.RS负责切分在运行过程中变得过大的region

Zookeeper(以下简称ZK)

1.通过选举,保证任何时候,集群中只有一个active master(HMaster与RS启动时会向ZK注册)

2.存贮所有region的寻址入口,如-ROOT-表在哪台服务器上

3.实时监控RS的状态,将RS的上下线信息通知HMaster

4.存储HBase的元数据,如有哪些table,每个table有哪些column family

client包含访问HBase的接口,维护着一些缓存来加速对HBase的访问,比如region的位置信息。

client在访问HBase上数据时不需要HMaster参与(寻址访问ZK和RS,数据读写访问RS),HMaster主要维护着table和region的元数据信息,负载很低。

HBASE数据存储


通过之前的HBase系统架构图,可以看出:

1.HBase中table在行的方向上分割为多个region,它是HBase负载均衡的最小单元,可以分布在不同的RegionServer上,但是一个region不能拆分到多个RS上

2.region不是物理存储的最小单元

region由一个或者多个store组成,每个store保存一个column family。每个store由一个memstore和多个storefile组成,storefile由hfile组成是对hfile的轻量级封装,存储在hdfs上。

3.region按大小分割,默认10G,每个表一开始只有一个region,随着表中数据不断增加,region不断增大,当增大到一个阀值时,region就会划分为两个新的region。

当表中的数据不断增多,就会有越来越多的region,这些region由HMaster分配给相应的RS,实现负载均衡。

HBase底层存储基于hdfs,但对于为null的列并不占据存储空间,并且支持随机读写,主要通过以下机制完成:

1.HBase底层存储结构依赖了LSM树(Log-structured merge tree)

2.数据写入时先写入HLog,然后写入memstore,当memstore存储的数据达到阈值,RS启动flush cache将memstore中的数据刷写到storefile

3.客户端检索数据时,先在client缓存中找,缓存中找不到则到memstore找,还找不到才会从storefile中查找

4.storefile底层以hfile的形式存储到hdfs上,当storefile达到一定阈值会进行合并

5.minor合并和major合并小文件,删弃做过删除标记的数据

WAL log


即预写日志,该机制用于数据的容错和恢复,每次更新都会先写入日志,只有写入成功才会通知客户端操作成功,然后RS按需自由批量处理和聚合内存中的数据。

每个HRegionServer中都有一个HLog对象,它负责记录数据的所有变更,被同一个RS中的所有region共享。

HLog是一个实现预写日志的类,在每次用户操作写入memstore之前,会先写一份数据到HLog文件中,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值