HBase的架构

本文详细介绍了HBase的架构,包括Zookeeper在高可用和元数据管理中的作用,HMaster和HRegionServer的职责,以及HRegion的分裂、Store、MemStore和StoreFile的细节。还探讨了HBase的WAL日志、BlockCache、HDFS的使用以及其与关系数据库的区别。此外,文章还解析了HBase的数据结构,如Rowkey、Column Family、Cell和TimeStamps,并概述了HBase的读写流程和集群配置要求。
摘要由CSDN通过智能技术生成

HBase的架构

在这里插入图片描述

Zookeeper

HBase通过zk来做Master的高可用,RegionServer的监控、元数据的入口以及集群配置的维护工作;具体如下:

通过ZK保证集群中只有一个Master可用,在主的Master的出现异常后,会通过竞争机制产生新的Master

通过ZK监控RegionServer的状态,当RegionServer有异常时,同时Master RegionServer上下线信息。

通过ZK存储元数据

ZK作为统一的入口地址

HMaster

为RegionServer分配Region,维护集群的负载均衡,维护集群的元数据信息,发现失效的Region,将失效的Region分配到正常的RegionServer上,当RegionServer失效时,协调对应的HLog的拆分。

HRegionServer

HRegionServer直接对接用户的读写请求,是真正的干活的额节点,功能如下:

管理Master为其分配的Region

处理来自客户端的读写请求,负责与HDFS进行交互,负责Region变大后的拆分。

Region

  • HBase 表根据Rowkey 划分成Region,理论上一个Region包含该表格从起始行到结束之间的所有行。
  • 但是往往有可能一个Region没有办法存储这个表中所有的行,会进行切分 数据大小>=N^2*128MB(N为Region数量),当N=9时,切分大小会超过10GB,此时就按照10GB进行切分。
  • Region由Store 组成
  • Region会被分配到称之为“HRegionServer”的节点上
Store

每一个Region由一个或者多个Store组成,至少是一个Store 。HBase会把经常访问的数据放在一个Store里面,即一个列簇组成一个Store ,有多少个列簇就多少个Store 。

在Store 中,由一个memStore 和 0个或者多个StoreFile 组成

MemStore
  • 写缓存。数据先写入到MemStore,触发flush机制后写到磁盘中
  • 以key-value的形式存储到内存中
  • MemStore的6种Flush机制(当MemStore Flush触发后,同一Region下的所有的MemStore都会刷新)
    • MemStore级别:当Region中有一个MemStore的大小达到上限(默认为128MB hbase.hregion.memstore.flush.size),会触发MemStore刷新
    • Region级别:当Region中所有的MemStore大小总和达到的上限(256MB hbase.hregion.memstore.block.multiplier * hbase.hregion.memstore.flush.size,默认 2* 128M = 256M)
    • RegionServer级别:当RegionServer中所有的MemStore大小总和达到上限(hbase.regionserver.global.memstore.upperLimit * hbase_heapsize,默认 40%的JVM内存使用量),会触发部分Memstore刷新。Flush顺序是按照Memstore由大到小执行,先Flush Memstore最大的Region,再执行次大的,直至总体Memstore内存使用量低于阈值(hbase.regionserver.global.memstore.lowerLimit * hbase_heapsize,默认 38%的JVM内存使用量)。
    • 当一个RegionServer中HLog数量达到了上限(可通过参数hbase.regionserver.maxlogs配置)时,系统会选取最早的一个 HLog对应的一个或多个Region进行flush
    • HBase定期刷新Memstore:默认周期为1小时,确保Memstore不会长时间没有持久化。为避免所有的MemStore在同一时间都进行flush导致的问题,定期的flush操作有20000左右的随机延时。
    • 手动执行flush:用户可以通过shell命令 flush ‘tablename’或者flush ‘region name’分别对一个表或者一个Region进行flush。
StoreFile|HFile

HFile(StoreFile) 用于存储HBase的数据(Cell/KeyValue)。在HFile中的数据是按RowKey、Column Family、 Column排序,对相同的Cell(即这三个值都一样),则按timestamp倒序排列。

由于MemStore中存储的Cell遵循相同的排列顺序,因而Flush过程是顺序写,由于不需要不停的移动磁盘指针,因此磁盘的顺序写性能很高。


HFile的组成分为6部分,分别是数据块、元数据块、FileInfo块、数据索引块、元数据索引块、HFile文件尾,它们的详细描述如下:

名称 描述
数据块 由多个Block(块)组成,每个块的格式为: [块头] + [Key长] + [Value长]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值