HBase详细介绍及原理解析!( 三 )

Cell(单元格):

  • 由{rowkey, column, version} 唯一确定的单元 。
  • Cell 中的数据没有类型,全部是以字节数组进行存储 。
基本原理如何支持海量数据的随机存取利用了HDFS的分布式存储和Hadoop的分布式计算能力:
  • 将数据存储在HDFS上,并利用Hadoop的MapReduce框架进行分布式计算,从而实现了高可扩展性和高并发性 。
将数据按照行和列族的方式存储在HDFS上:
  • 这种数据存储方式使得HBase能够实现高速的随机读写功能 。
利用了LSM(Log-Structured Merge-Tree)算法:
  • 该算法通过内存和顺序写磁盘的方式,使得随机写入成为可能,同时还能保证读取效率 。
支持数据的自动分片和负载均衡:
  • 可以支持PB级别的数据存储和处理,从而满足大规模数据的实时处理需求 。
整体结构
HBase详细介绍及原理解析!

文章插图
HMaster:
  • HBase集群的主节点,负责监控RegionServer,处理Region分配和负载均衡 。
HRegionServer:
  • 管理 Region,处理对所分配Region的IO请求,Region是表的分片,由多个Store组成 。
Zookeeper:
  • 维护HBase的运行状态信息,如Region分布信息等 。
  • HMaster和RegionServer都依赖Zookeeper 。
HRegion:
  • HBase表的分片,由一个或者多个Store组成,存储实际的表数据 。
Store:
  • Store以Column Family为单位存储数据,主要组成是MemStore和StoreFile(HFile) 。
  • 1个Column Family的数据存放在一个Store中 , 一个Region包含多个Store 。
MemStore:
  • 内存存储,用于临时存放写数据,达到阈值后刷入StoreFile 。
  • 数据会先写入到 MemStore 进行缓冲,然后再把数据刷到磁盘 。
  • 通过内存 , 也加快了读写速度 。
StoreFile(HFile):
  • 磁盘上面真正存放数据的文件 。
HDFS:
  • 用来持久化存储HFiles 。
一个列族就划分成一个 Store , 如果一个表中只有 1 个列族,那么每一个 Region 中只有一个 Store 。
一个 Store 里面只有一个 MemStore 。
一个 Store 里面有很多个 StoreFile, 最后数据是以很多个 HFile 文件保存在 HDFS 上 。
  • StoreFile是HFile的抽象对象 。
  • 每次 MemStore 刷写数据到磁盘,就生成对应的一个新的 HFile 文件出来 。

HBase详细介绍及原理解析!

文章插图

HBase详细介绍及原理解析!

文章插图
负载均衡HBase 官方目前支持两种负载均衡策略:
  • SimpleLoadBalancer 策略和 StochasticLoadBalancer 策略 。
SimpleLoadBalancer 策略:
这种策略能够保证每个 RegionServer 的 Region 个数基本相等 。
假设集群中一共有 n 个 RegionServer,m 个 Region ,那么集群的平均负载就是 average = m/n 。
  • 这种策略能够保证所有 RegionServer 上的 Region 个数都在 [floor(average),ceil(average)]之间 。
因此 ,  SimpleLoadBalancer 策略中负载就是 Region 个数,集群负载迁移计划就是 Region 从个数较多的 RegionServer 上迁移到个数较少的 RegionServer 上 。
虽然集群中每个 RegionServer 的 Region 个数都基本相同,但如果某台 RegionServer 上的 Region 全部都是热点数据,导致 90 %的读写请求还是落在了这台 RegionServer 上,这样没有达到负载均衡的目的 。


推荐阅读