HBase架构
首先摆一个架构图
主要包含的方面是
- HDFS 因为数据是保存在HDFS上的HBase内存满了之后就会将内存中的数据写入到HDFS上.也就是说除了内存之外的数据全部保存在HDFS上
- Client:
- 与HBase进行读写操作
- 可以有多个Client来访问HBase
- ZooKeeper
- 客户端是与ZooKeeper进行交互的并不是直接与HMaster进行交互的ZooKeeper中存储的信息是非常重要的比如:
- 保证集群中只有一个HMaster,以及当前的Master是哪个,管理着哪些RegionServer
- 监控RegionServer的上下线,并实时通知Master
- HMaster
- 为RegionServer分配Region,
- RegionServer负载均衡
- 发现某一个RegionServer失效,则会把该RegionServer上的Region分配到其它的RegionServer上
- HBase中可能会有多个Master但是整个集群只有一个Master可用,当一个Master挂掉.则通过Zookeeper选举一个Master,所以这里不会出现单点故障
- RegionServer:
- 维护Region,处理Region的IO请求
- RegionServer负责切分在运行过程中变得过大的Region
- 负责 存储真正的数据;
- 一个RegionServer中管理多个Region
- Region
- 按行对RowKey对应的数据进行拆分
- 一个Region中存储的是多个Store
- 每一个Store对应着一个ColumnFamily
- 数据先存储在MemStore中.
- 当MemStore中的数据达到一个阈值之后.
- 将数据放到StoreFile里面,以HFile的方式通过HDFS Client存放在DataNode上
- 最终数据是以HFile的方式存储在HDFS上面的
- Client
- 通过ZooKeeper来与HMaster进行交互
- HLog
- 记录操作记录,为了容错处理.
- 数据丢失,可以回滚
- 客户端是与ZooKeeper进行交互的并不是直接与HMaster进行交互的ZooKeeper中存储的信息是非常重要的比如:
HBase是依赖于ZooKeeper的,防止单点故障
1. ZooKeeper是外置的(推荐)
1. 因为HDFS等一些东西都需要ZooKeeper进行主备份的切换.
2. 同理既然已经有ZooKeeper则使用一个就可以了
2. HBase内置的
总结
- Client发起请求读写,HM通过Zk进行选举
- HMaster管理多个RegionServer的上下线,负载均衡等
- RegionServer管理多个Region
- 一个Region由多个Store组成
- 一个Store对应一个ColumnFamily
- Store中的数据首先存放在MemoryStore中
- 达到一定阈值会把MemoryStore中的数据写到StoreFile中
- StoreFile最终以HFile的方式写入到HDFS之上
- Client的每次操作都会以Log的方式记录,方便以后数据的回滚.