HBASE架构
HBASE是一个基于Hadoop HDFS存储的分布式数据库,与行存储的关系型数据库(如MySQL、Excel)不同,HBASE中的数据为列式存储,在进行大规模的数据查询操作时效率很高。
HBASE表只能进行插入、查询、删除和清空操作,无法对已经存储的数据进行更新,但可以通过保存多个版本号来存储历史数据。HBASE表与表之间没有联系,不涉及表之间的连接操作。
HBASE的架构如下图所示,是一个典型的Master/Slave架构。其中独立的组件有HMaster、HRegionServer、Zookeeper、Client,下面将一一介绍这几个组件。
HMaster
HMaster负责管理HBASE表的创建和删除、HRegion的调度、更新和存储HRegion的状态,及其他与HRegion元信息相关的处理操作。
HMaster启动过程
启动HMaster后, 初始化文件系统FileSystem,然后从FileSystem中读取表的元信息,预加载HBase Table Descriptors,接着初始化管理RegionServer信息的ServerManage和ServerCrashProcedure(并不启动),为恢复CrashServer的恢复做准备,然后启动分配Region的AssignmentManager线程,更新Zookeeper中表的元信息,然后初始化协处理器和master中的一些服务线程,然后等待Region Server存活汇报,等Region Server汇报上来后,开始分配HRegion到各个RegionServer上。
当集群中Region数量特别多的时候,加载HTD和分配Region的速度比较慢,此时耐心等候即可。生成环境中,25万Region的集群,整个启动过程需要一个小时左右。
为保障集群稳定,一般启动两个HMaster,当一个为活动状态时,另一个则为Backup状态。有时候遇到一些Region状态不一致的情况,可以通过切换HMaster来解决。切换HMaster的时间比重启整个集群的时间要短很多。
HRegionServer
Region Server负责管理HMaster分配过来的所有Region,一个Region的所有数据读写都在其所在的Region Server上完成。Region Server管理Region的分裂、StoreFile的压缩合并。Region Server上可以管理多个Region,因此当QPS很高时,一个Region Server上Region数量不能太多,一般200以内为宜。
当HMaster发出Compact命令时,真正的压缩操作也是在Region Server上完成,Major Compact特别占用网络和IO,会对Region Server造成高负载,因此一般都是关闭自动Major Compact,在半夜空闲时间手动执行。
一个HBASE集群可以有多个Region Server,但过多Region Server会对HMaster造成高负载,所以一般不超过1000台机器,通常HBASE集群都是几十台机器小集群部署。
Zookeeper
ZK存储当前集群的Master/Region Server信息,Region Server在表中创建临时节点,HMaster通过这些临时节点发现存活的Region Server。
当发生Region Server负载高,可以正常与ZK通信,但Region读写异常的时候,可以直接重启Region Server,当之前的Region Server节点长时间未发送心跳时,ZK上之前的节点将会被删除,HMaster发生一次SCP。
Client
当发生HBASE读写时,HBASE客户端与ZK建立通信连接,获取Meta表所在的位置,然后访问Meta表所在的Region Server,获取Meta表中Region信息并缓存到本地,接着根据Meta表中Region信息获取要访问的Region Server,然后跟Region Server通信,对Region发起读写请求。