你再主动一点点 我们就有故事了
1. 简述HBase架构
Client
1.首先需要与Zookeeper进行通信获取hbase:meta
表的元数据信息
2.读取HBase上hbase:meta
表信息,确定客户端的具体操作的表存在于哪个RegionServer上
3.Master定位RegionServer信息,并且与RegionServer直接建立通信
Zookeeper
1.提供Master选举,避免单点故障
2.实时监控RegionServer的状态,将RegionServer的上线和下线信息实时通知给Master
3.存储HBase的Schema信息,包括命名空间、table以及table包含的列族等信息
4.存储所有Region的寻址入口信息
HMaster
1.为RegionServer分配Region
2.负责RegionServer负载均衡
3.负责RegionServer容错,一旦发现某个RegionServer停服,会重新分配其上的Region
4.处理客户端对表结构的更新请求(创建表、删除表、修改表以及命名空间操作)
HRegionServer
1.负责维护管理Master分配给它的Region,每个RegionServer可以管理多个Region
2.负责切分在运行过程中变得过大的Region
3.能够响应客户端对数据的读写请求
HRegion
1.主要是用来存储Table中的数据,Tables 通过行键的范围 (row key range) 被水平切分成多个Region,一个Region包含了start key和end key之间的所有行数据
2.每个Region负责管理一个或者多个Store(列族)
3.当Region的数据量(10G)过大时,会发生裂变,这个Region会均分为两个Region,拆分后一个Region会发生转移(数据还在原RegionServer,只是管理权发生转移)会由两个RegionServer进行管理
4.每个Region都隶属于一个RegionServer(管理表数据的增删改查),Region是不会拆分到多个RegionServer上的
5.Region是HBase中分布式存储和负载均衡的最小单元
Store
1.用来保存表中列族数据,一个表中可以存在多个列族,意味着一个Region中可以包含多个Store
2.HBase以Store的大小来判断Region是否需要进行切分
3.Store由一个MemStore和多个StoreFile组成
MemStore
1.将数据存储到内存中,当MemStore中数据达到阈值(1.4.13版本128M)时会将数据Flush到StoreFile
2.存储的数据结构为key/value形式
3.当MemStore中数据Flush到HFile时会启动一个新的线程并且会生成一个快照
4.HBase在进行读操作时,首先访问MemStore,如果不存在则扫描HFile
5.HBase在进行写操作时,首先将数据写入到MemStore,然后Flush到文件系统
StoreFile
1.接收MemStore的Flush操作的数据
2.StoreFile是存储到文件系统中的
3.在进行存储时会先形成一系列的HFile(Key/Value),当StoreFile的数量增加到阈值时,HBase会进行合并操作,从而形成更大的StoreFile,并且会删除小的StoreFile(大合并)
HFile
存储到HDFS之上的二进制文件,数据是以key/value形式的byte数组存储的
HLog
1.HLog(WAL 预写日志) 是RegionServer级别的预写日志。主要用于数据容灾恢复
2.HLog记录的主要是数据更新和插入操作 ,一旦RegionServer停服可以根据预写日志进行数据恢复
3.HLog存储在HDFS之上
4.一旦数据成功的写入到HFile中,此时会删除预写日志
tips:HLog是RegionServer级别的预写日志,每个RegionServer拥有一个HLog日志,同一个RegionServer上的Region会共享该预写日志文件
WAL机制解析
WAL(Write-Ahead Logging)是一种高效的日志算法,几乎是所有非内存数据库提升写性能的不二法门,基本原理是在数据写入之前首先顺序写入日志,然后再写入缓存,等到缓存写满之后统一落盘。之所以能够提升写性能,是因为WAL将一次随机写转化为了一次顺序写加一次内存写。提升写性能的同时,WAL可以保证数据的可靠性,即在任何情况下数据不丢失。假如一次写入完成之后发生了宕机,即使所有缓存中的数据丢失,也可以通过恢复日志还原出丢失的数据。
WAL的持久化等级分为如下四个等级:
1. SKIP_WAL:只写缓存&#x