1

Hbase特点 

Hbase架构设计_java


2

Hbase架构 

Hbase架构设计_java_02

架构原理图


1.HBase客户端
2.ZooKeeper
3.Master:负责HBase系统的各种管理工作
4.RegionServer
5.HDFS
详情原理请往下细细品~


3

Hbase组件作用 

ZK在Hbase作用

1、实现Master高可用

2、管理系统核心元数据 :meta所在的RegionServer地址

3、参与RegionServer宕机恢复


Master主要负责HBase系统的各种管理工作

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

2、管理集群中所有RegionServer,包括RegionServer中Region的负载均衡、RegionServer的宕机恢复以及Region的迁移等

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


4

Hbase组件作用 

RegionServer

RegionServer主要用来响应用户的IO请求,是HBase中最核心的模块,由WAL(HLog)、BlockCache以及多个Region构成。


·WAL(HLog):

1、用于实现数据的高可靠性,HBase数据随机写入时,并非直接写入HFile数据文件,而是先写入缓存,再异步刷新落盘。为了防止缓存数据丢失,数据写入缓存之前需要首先顺序写入HLog,这样,即使缓存数据丢失,仍然可以通过HLog日志恢复;

2、用于实现HBase集群间主从复制,通过回放主集群推送过来的HLog日志实现主从复制。


·BlockCache:读缓存



5

Region内部结构 

HRegion:一个Region可以包含多个Store;

Store:每个Store包含一个Memstore和若干个StoreFile;

StoreFile:表数据真实存储的地方,HFile是表数据在HDFS上的文件格式。



6

Hbase读流程 

  • 从zk获取meta表位置

  • 读取meta表rowkey存储的rs-region地址

  • 先读取内存-在读取磁盘的顺序

        先读memstore数据,如memstore数据没有则读取blockCache中数据

        如blockCache数据未命中周日读取HDFS中数据 存储

        再取数据则优先从blockCache中取

  • 数据返回给客户端


7

Region内部结构 

RegionServer是HBase系统响应用户读写请求的工作节点组件,由多个核心模块组成,其内部结构如图所示。

Hbase架构设计_java_03



8

Hbase-客户端Region定位 

Hbase架构设计_java_04




9

Hbase写流程 

Hbase架构设计_java_05

  • 从zk获取meta表位置

  • 读取meta表rowkey所对应存储rs-region地址

  • 以追加形式写入wal日志落HDFS

  • 将数据存储memstor中

  • WAL和memstor在返回客户端ack



10

思考:查询sequenceld≤101

返回数据是哪几条? 

Hbase架构设计_java_06



11

HBase Region Flush 

Hbase架构设计_java_07



12

LSM->Log-Structured Merge-Tree

Hbase架构设计_java_08



113

Hbase数据模型 

  • 跳跃表的查找、删除、插入的复杂度都是O(logN)

  • LSM树都会将写入操作处理为一次顺序写,而HDFS擅长的正是顺序写,

  • 因此基于HDFS实现的HBase采用LSM树作为索引是一种很合适的选择。

  • LSM树的索引一般由两部分组成,一部分是内存部分,一部分是磁盘部分。

  • 内存部分一般采用跳跃表来维护一个有序的KeyValue集合。

  • 磁盘部分一般由多个内部KeyValue有序的文件组成。


Hbase架构设计_java_09



14

HBase Compaction 

Hbase架构设计_java_10