2 HBase架构
HBase系统架构图(注意,每个HRegsionServer维护一个HLog文件)
2.1客户端(client)
HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC。
2.2 Zookeeper
ZookeeperQuorum中存储的信息包括:
- 存储-ROOT-表的地址:/hbase/root-region-server
- 存储HMaster的地址:/hbase/master
- 存储所有HRegionServer的状态,HRegionServer会把自己以短暂的(Ephemeral)方式注册到 Zookeeper中:/hbase/rs
2.3 HMaster
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个HMaster运行,HMaster在功能上主要负责table和region的管理工作:
- 管理用户对table的增、删、改、查操作
- 管理HRegionServer的负载均衡,调整region分布
- 在region split后,负责新region的分配
- 在HRegionServer停机后,负责失效HRegionServer上的region迁移
- HDFS的垃圾文件回收
- 处理schema更新请求
注意:Client访问HBase上数据的过程并不需要HMaster参与(寻址访问Zookeeper和HRegionServer,数据读写访问HRegioneServer),HMaster仅仅维护者table和region的元数据信息,负载很低。
2.4 HRegionServer
HRegionServer维护HMaster分配给它的region,并负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。
HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了table中的一个region,HRegion中由多 个HStore组成。每个HStore对应了Table中的一个column family的存储,可以看出每个columnfamily其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个column family中,这样最高效。
HStore存储是HBase存储的核心,由两部分组成,一部分是MemStore,一部分是StoreFile。MemStore是 Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile)。