HBase集群组成
Hbase采用HMaster/HRegionServer主从架构搭建集群。由zookeeper、HMaster、HRegionServer、HDFS结点组成

Zookeeper
- HBase启动时,自动在Zookeeper上注册一个临时节点/hbase/master

- 后续启动HMaster(启动命令为:hbase-daemon.sh start master),自动在/hbase/backup-masters目录下注册节点,这个目录下的节点被标记为一个热备份节点

- 活跃的HMaster和备份HMaster节点都会定期向Zookeeper发送心跳信息,如果一段时间内Zookeeper没有收到active HMaster的心跳,就会从backup-masters中随机挑选一个节点切换为active状态
- 热备份HMaster在将自己变为Active HMaster之前,会在/hbase/backup-masters目录下生成自己的临时节点

- HReginServer启动,在zk生成临时节点/hbase/rs
HMaster不直接监控HReginServer,而是监控zk的/hbase/rs节点。若一个HReginServer节点宕机,zk收不到这个HReginServer节点的心跳,zk就会去删除与之对应的节点值

∴ ZooKeeper为HBase集群提供协调服务,它管理着HMaster和HRegionServer的状态(available/alive)及整个HBASE集群的元数据
∴ 当HMaster宕机的时候实现HMaster之间的failover(失败恢复)
∴ 当HRegionServer宕机时通知给HMaster,从而转移宕机的HRegionServer中的HRegion集合
HMaster
- HBase对外提供了元数据方法的接口,实现对表的增删改查操作
- 实现HRegionServer的负载均衡、及**HRegion的分配和调整
HRegionServer

- HRegionServer一般和DataNode在同一台机器上运行,实现数据的本地性
- HRegionServer存储和管理多个HRegion,由WAL(HLog)、BlockCache、Region组成
- HLog是HDFS上的一个文件,HMaster对HRegionServer的所有写操作请求都会先保证写入这个HLog文件后,才会真正更新MemStore,最后写入HFile中。采用这种模式,即使HRegionServer宕机后,依然可以从该Log文件中恢复数据。一般一个HRegionServer服务器只有一个HLog文件。0.94之前,所有的写操作串行执行,1版本之后,写操作可以并发执行。
- BlockCache是一个读缓存,基于局部性原理,把数据读取到内存,提高了读缓存的命中率,提升了读的性能。BlockCache缓存过大时,采用LRU(最近最少使用)策略回收内存。采用“空间局部性原理”:CPU在某一时刻需要某个数据,那么有很大的概率在一下时刻它需要的数据在其附近,将其附近数据放入缓存。采用“时间局部性原理”:某个数据在被访问过一次后,它有很大的概率在不久的将来会被再次的访问,将该数据放入缓存。
- HRegion由一个或者多个HStore(HStore)构成,每个HStore保存一个列族,由一个MemStore 、0个或多个StoreFile组成。

- HRegionServer和DataNode一般会放在相同的Server上实现数据的本地化(避免或减少数据在网络中的传输,节省带宽)
HDFS
HBASE中的数据存储在HDFS。下面是HBase在HDFS中的⽂件布局

① .tmp:临时⽂件⽬录,主要⽤于HBase表的创建和删除操作。
(1) 表创建的时候⾸先会在tmp⽬录下执⾏,执⾏成功后再将tmp⽬录下的表信息移动到实际表⽬录下。
(2) 表删除操作会将表⽬录移动到tmp⽬录下,⼀定时间过后再将tmp⽬录下的⽂件真正删除
②WALs:存储集群中所有RegionServer的HLog⽇志⽂件
③ archive:⽂件归档⽬录
(1)所有对HFile⽂件的删除操作都会将待删除⽂件临时放在该⽬录
(2) Compaction删除HFile的时候,也会把旧的HFile移动到这⾥
④ corrupt:存储损坏的HLog⽂件或者HFile⽂件
⑤ hbase.id:集群启动初始化的时候,创建的集群唯⼀id。
⑥ hbase.version:HBase软件版本⽂件
⑦oldWALs:WAL归档⽬录。⼀旦⼀个WAL⽂件中记录的所有KV数据确认已经从MemStore持久化到HFile,那么该WAL⽂件就会被移到该⽬录
⑧ data:存储集群中所有Region的HFile数据
default表示命名空间,创建表时,未指定命名空间的表都会存储在该目录

⑨ data > hbase > meta 存储HBASE集群的元数据
命名空间hbase,表meta不分区,存储在一台HRegion结点上
hbase shell客户端访问HBASE集群的元数据表:

describe ‘hbase:meta’ 查看元数据表表结构

元数据表表结构

1万+

被折叠的 条评论
为什么被折叠?



