HBase架构原理

HBase是一个基于Hadoop HDFS的高可靠性、高性能的列式存储系统。它利用Zookeeper进行协同服务,通过HMaster监控RegionServer并处理数据分配、故障转移。HBase中的数据被划分为多个Region,存储在HRegionServer上,每个Region由Store、MemStore和StoreFile组成,保证数据的高效读写。HLog用于记录所有变更,确保数据安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HBase架构原理

HBase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价的PC Server上搭建大规模结构化存储集群。

HBase是Google BigTable的开源实现,与Google BigTable利用GFS作为其文件存储系统类似,HBase利用Hadoop HDFS作为其文件存储系统;

Google运行MapReduce来处理BigTable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;

Google BigTable利用Chubby作为协同服务,HBase利用Zookeeper作为协同服务。

 

 

HClient、HMaster、HRegionSever、HRegion、HLog、Store、MemStore、StoreFile、HFile角色组件

 

HClient


包含访问的HBase的接口并维护cache来加快对HBase的访问

接口会去meta表查询目标region所在位置(此信息会放入缓存),并连接对应RegionServer进行数据读写。

当master rebalance region时,Client会重新进行查找。

HBase Client通过RPC机制与HMaster和HRegionServer进行通信。

管理类操作:Client---->HMaster

数据读取类操作:Client---->HRegionSrever


Zookeeper


保证任何时候,集群中只有一个master
存储所有Region的寻址入口
实时监控RegionServer的上线和下线信息,并实时通知Master
存储HBase的schema和table元数据

HMaster

  1. 监控RegionServer
  2. 处理RegionServer故障转移
  3. 处理元数据变更
  4. 处理region的分配或移除
  5. 空闲时对数据进行负载均衡
  6. 通过zookeeper发布自己的位置给客户端

HRegionServer

  1. 负责存储Hbase的实际数据
  2. 处理分配给它的region
  3. 刷新缓存到HDFS上
  4. 维护HLog
  5. 执行压缩
  6. 负责处理Region分片

HRegion


HBase自动把表水平划分为多个区域(region,每个region会保存一个表里面的某段连续的数据;每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分两个新的region,这个过程也叫裂变。
当table中的行不断增多,就会有越来越多的region。这样一张完整的表就会被保存在多个RegionServer上。

table在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。

Region按大小分隔,每个表一般是只有一个region。随着数据不断插入表,region不断增大,当region的某个列族达到一个阈值(默认256M)时就会分成两个新的region。

        每个region由以下信息标识:

        1、< 表名,startRowkey,创建时间>

        2、由目录表(-ROOT-和.META.)记录该region的endRowkey

        HRegion定位:Region被分配给哪个Region Server是完全动态的,所以需要机制来定位Region具体在哪个region server。

        HBase使用三层结构来定位region:

        1、 通过zk里的文件/hbase/rs得到-ROOT-表的位置。-ROOT-表只有一个region。

        2、通过-ROOT-表查找.META.表的第一个表中相应的region的位置。其实-ROOT-表是.META.表的第一个region;.META.表中的每一个region在-ROOT-表中都是一行记录。

        3、通过.META.表找到所要的用户表region的位置。用户表中的每个region在.META.表中都是一行记录。

 -ROOT-表永远不会被分隔为多个region,保证了最多需要三次跳转,就能定位到任意的region。client会将查询的位置信息保存缓存起来,缓存不会主动失效,因此如果client上的缓存全部失效,则需要进行6次网络来回,才能定位到正确的region,其中三次用来发现缓存失效,另外三次用来获取位置信息。

table 和region 的关系
  table 默认最初只有一个region,随着记录数的不断增加而变大,起初的region会逐渐分裂成多个region,一个region有【startkey,endkey】表示,不同的region会被master分配给相应的regionserver管理
 
  region 是hbase分布式存储和负载均衡的最小单元,不同的region分不到不同的regionserver
 
注意:region 虽然是分布式存储的最小单元,但并不是存储的最小单元
region 是由一个或者多个store 组成的,每个store就是一个 column family
每个stroe 又由一个memstore 和 1至多个store file组成(memstore 到一个阈值会刷新,写入到storefile,有hlog 来保证数据的安全性,一个 regionserver 有且只有一个hlog)

 Store

 每一个HRegion由一个或多个Store组成,至少是一个Store,HBase会把一起访问的数据放在一个Store里面,即为每个ColumnFamily建一个Store,如果有几个ColumnFamily,也就有几个Store。一个Store由一个MemStore和0或者多个StoreFile组成。 HBase以Store的大小来判断是否需要切分HRegion。

一个region由多个store组成,一个store对应一个CF(列族)
store包括位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次吸入形成单独的一个storefile
当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile
当一个region所有的storefile的大小和超过一定阈值后,会把当前的region分割为两个,并有hmaster分配到相应的regionserver服务器,实现负载均衡
客户端检索数据,现在memstore找,找不到再找storefile

MemStore

MemStore 是放在内存里的,保存修改的数据即keyValues。当MemStore的大小达到一个阀值(默认64MB)时,MemStore会被Flush到文件。

即生成一个快照。目前HBase会有一个线程来负责MemStore的Flush操作。

Storefile

MemStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。

  HFile

HBase中KeyValue数据的存储格式,是Hadoop的二进制格式文件。 首先HFile文件是不定长的,长度固定的只有其中的两块:Trailer和FileInfo。

Trailer中有指针指向其他数据块的起始点,FileInfo记录了文件的一些meta信息。Data Block是HBase IO的基本单元,为了提高效率,

HRegionServer中有基于LRU的Block Cache机制。每个Data块的大小可以在创建一个Table的时候通过参数指定(默认块大小64KB),

 大号的Block有利于顺序Scan,小号的Block利于随机查询。每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成,

HLog 

  HLog(WAL log):WAL意为write ahead log,用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。

 

参考资料:https://www.cnblogs.com/steven-note/p/7209398.html

                  https://blog.youkuaiyun.com/lds_include/article/details/88826262

侵权联系删除!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值