HBase架构

        

                                                                 HBase架构图

1.客户端

        1.hbase-client:Client 包含了访问 Hbase 的接口,譬如我们在某个工程里要连接HBase时,必须引入hbase-client依赖。

        2.缓存:提供cache功能加速HBase的访问;譬如缓存某个region所在的RegionServer的地址,再次访问时直接连接RegionServer,不再从meta表获取相应的信息。

2.Zookeeper

        HBase强依赖于zk

        1.高可用:通过 Zoopkeeper 来保证集群中只有 1 个 master 在运行,如果 master 异常,会通过竞争机制产生新的 master 保障了系统的高可用,其原理与HDFS的高可用类似

      2.故障检测和恢复其原理就是RegionServer在zk中注册一个临时节点,然后HMaster监听其节点,随时感知RS的状态,譬如RS挂掉了,HMaster将其所有的region迁移到其他健康资源相对空闲的RS上。 

        3.元数据管理通俗的理解就是zk记录了.meta表的信息,当我们不管是put或scan/get操作时,总是先从client缓存中寻找,未找到时从zk中获取.meta表所在的RS,也就是说zk记录了元数据的统一入口地址

        这里稍微注意:.meta表是不固定存放在某个RS上的,原因有许多,譬如RS挂了、或者是HMaster做负载均衡等,所以需要zk去维护.meta表所在RS的地址,而且.meta表不大,也是一个region,并且不会分裂。

        4.配管理置:ZooKeeper存储和管理HBase集群的配置信息,包括HBase的版本、表的结构、Region的分布等。HBase的各个节点通过与ZooKeeper交互,获取最新的配置信息,确保集群配置的一致性。

        5.分布式锁和同步:HBase利用ZooKeeper提供的分布式锁和同步机制来协调多个节点之间的并发操作。例如,在Region的分裂、合并或负载均衡过程中,ZooKeeper提供了必要的锁和同步机制,以确保操作的一致性和正确性,譬如多个用户同时对一个表(region)进行修改、删除等DDL操作,避免冲突以及保证数据的一致性、准确性;多线程下,先要获取一个表的全局锁,保证其原子性。

3.HMaster   

        HMaster负责为集群管理和协调的重要角色

        1.DDL语句:管理用户对Table表的增、删、改、查操作;

        2.负载均衡:管理HRegion服务器的负载均衡,调整HRegion分布;

        3.分配region:在HRegion分裂后,负责新HRegion的分配;

        4.故障恢复:在HRegion服务器停机后,负责失效HRegion服务器上的HRegion迁移。

4.HRegionServer

        HRegionServer才是HBase中真正干活的节点

        1. 定期向Master汇报RS的情况:包括RS内存使用状态、在线状态的Region等信息

        2.管理Region:执行Flush、Compaction、Open、Close、Load等操作

        3.管理WAL

        4.管理数据执行数据插入、更新和删除操作

        5.负责 HDFS交互

5.HDFS

        HDFS 为 Hbase 提供最终的底层数据存储服务,同时为 Hbase 提供高可用(Hlog 存储在
HDFS)的支持。

        注意:因为在RS中,region没有副本,只有一个,当HFile存储在HDFS上时才有副本。

6.HRegion

        Region是hbase数据模型的基本单元,它负责管理和存储一部分数据

        一个Region类似于一张表

        一个Region有一个或多个store(列族)

        一个store有一个memstory和一个或多个HFile

        1.数据存储:每个Region负责存储一定范围的rowkey,按列族的方式将数据存储在磁盘当中,基于LSM存储引擎对数据进行读写。

        2.memstory:先将数据写入内存,达到一定阈值时在flush到磁盘中,极大地提高了写的吞吐量;并且引用跳表来存储数据,保证数据是有序的,那么就可以将Region中一样的列族在HFlie中可以存储在一起,这样在读取整个dataBlock时,有利于缓存及读取的性能。

        3.引用布隆过滤器和LRU算法维护HFile的缓存,提高缓存命中率;2.0版本引入了bucketCache,解决了布隆过滤器耗内存及垃圾回收等问题。

        在这里为何特别强调缓存呢?hbase为了提高写的性能,引入memstory,一定程度影响了读的性能,所以hbase为了弥补读的性能,因此在读取流程中引入缓存的概念。

        而且在缓存中由于借助LRU算法,可以将数据分层为热数据和冷数据,感兴趣的可以去了解,在这里就不深入探讨了。

        注意:2.0版本之前的行和cell缓存都是通过列族的TTL来控制的,所以其缓存级别为块级别(HDFS的dataNode存储的Block-->HFile-->块,同样的意思)。2.0及后的版本是可以精细到行或cell的缓存,这里强调缓存的级别,是因为有些业务场景涉及到热点数据的问题,但业务今后再写。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值