Hbase系列(二)---- Hbase的体系结构及其作用

在上一个章节,我们了解到Hbase的数据是怎么存储的,对Hbase的数据结构大致上有了一定的理解,在本章节,我们来看看Hbase的一些体系结构。

一.Hbase客户端

  Hbase客户端提供了Shell命令行接口、原生的Java API编程接口、以及MapReduce编程接口。Hbase客户端访问数据之前,首先需要通过元数据表来定位目标数据锁在的RegionServer,之后才会发送请求到目标RegionServer中。同时这些元数据会被缓存在客户端本地,以方便之后的请求访问。如果集群RegionServer发生宕机或者执行了负载均衡等,从而导致数据分片发生迁移,客户端需要重新请求元数据并缓存到本地。

 

二.zookeeper

  zookeeper的应用场景有很多,在hadoop生态中,非常多组件都依赖zookeeper实现集群管理,这里我们只讨论zookeeper在Hbase中的应用。

  1.实现HMaster的高可用,一般情况下,在Hbase集群中,是只有一个Master在工作的,当active Master处于异常宕机后,zookeeper会检测到宕机事件,并且通过一定的机制选举出新的Master。

  2.管理核心的元数据,例如当前集群中正常运行的RegionServer集合。

  3.参与RegionServer的宕机恢复,zookeeper通过心跳检测可以感知到RegionServer是否宕机,并在宕机后通知Master进行恢复。

  4.实现分布式锁,Hbase中对一张表进行各种管理操作,需要先加表锁,防止多个用户对同一张表进行管理操作,造成表状态不一致。

 

三.master

  master主要负责Hbase系统的各种管理工作。

  1.处理用户各种管理请求,包括建表、修改表、权限操作、切分表、合并数据分片以及Compaction。

  2.管理集群中所有regionServer,包括regionServer中region的负载均衡,regionServer的宕机恢复以及数据迁移。

  3.负责清理过期日志以及文件,Master会每隔一段时间检查HDFS中Hlog是否过期,HFile是否以及被删除,并在过期之后将其删除。

 

四.regionServer

  1.WAL(Hlog) Hlog在Hbase中有两个核心作用

    第一是用于实现数据的高可靠,Hbase数据随机写入时,并非直接写到HFile数据文件中,而是先写入缓存,再异步刷新落盘。为了防止缓存数据丢失,数据写入缓存之前需要首先顺序写入Hlog,这样,即使缓存数据丢失,也可以从Hlog中恢复。

    第二是实现集群数据的主从复制。

  2.blockCache,它是Hbase中的读缓存,每个regionServer只有一个blockCache,客户端从磁盘读取到数据后,会将数据暂时缓存blockCache中。blockCache是由一些列block块组成的,默认块大小是64kb,它由“物理相邻”的多个KV数据组成,也因此,它具有“空间局部性”和“时间局部性”。

    目前blockCache由两种实现方式,分别是LRUblockCache和BucketCache。

    空间局部性是指用户在读取数据的时候,上一次读取的数据和这次读取的时间很可能是物理相邻的,因此缓存的时候直接以block为单位,而不是一个个KV对进行缓存。

    时间局部性是指一个KV数据正在被访问,那么他近期还可能会再次被访问。

  3.region,它是数据表的一个分片,当数据表大小超过一定的阈值,就会“水平切分”成两个或多个数据分片。region是集群负载均衡的基本单位,通常一张表的region会分布在整个集群的多台regionServer上,一个regionServer上会管理多个region,而同一个regionServer上的region一般来自不同的数据表。

    一个region由多个store组成,store是根据列簇来划分的,有多少个列簇,就有多少各store,每个列簇中的数据集中存放在一个store里面。

    一个store由一个memstore和多个Hfile组成,memstore是hbase的写入缓存,用户写入数据时首先会写到memstore,当memstore写满之后(阈值默认是128M),会异步flush成一个Hfile,而当写入操作持续进行,Hfile会越来越多,这时候系统会进行compact操作,将这些小文件通过一定的策略合并成一个或多个大文件。

 

五.HDFS

  Hbase的底层时HDFS,用户数据和HLog日志最终都会落盘到HDFS中。

posted @ 2020-09-06 12:12  喜欢it的小聪聪  阅读(1042)  评论(0编辑  收藏  举报