HBase架构
HBase构建在Hadoop HDFS之上,Hadoop HDFS为HBase提供了高可靠的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和容错机制。下面,通过一张图介绍一下HBase的整体架构,具体如图1所示。
图1 HBase架构
在图1中,HBase含有多个组件。下面,针对HBase架构中的核心组件进行详细介绍,具体如下:
Client
即客户端,它通过RPC协议与HBase进行通信。
Zookeeper
即分布式协调服务,在HBase集群中的主要作用是监控HRegionServer的状态,将HRegionServer的上下线信息实时通知给HMaster,确保集群中只有一个HMaster在工作。
HMaster
即HBase的主节点,用于协调多个HRegion Server,主要用于监控HRegion Server的状态以及平衡HRegion Server之间的负载。除此之外,HMaster还负责为HRegion Server分配HRegion。
在HBase中,如果有多个HMaster节点共存,提供服务的只有一个Master,其他的Master处于待命的状态。如果当前提供服务的HMaster节点宕机,那么其他的HMaster会接管HBase的集群。
HRegion Server
即HBase的从节点,它包括了多个HRegion,主要用于响应用户的I/O请求,向HDFS文件系统读写数据。
HRegion
即HBase表的分片,每个Region中保存的是HBase表中某段连续的数据。
Store
每一个HRegion包含一或多个Store。每个Store用于管理一个Region上的一个列族。
MemStore
即内存级缓存,MemStore 存放在store中的,用于保存修改的数据(即KeyValues形式)。当MemStore存储的数据达到一个阀值(默认128MB)时,数据就会被进行flush操作,将数据写入到StoreFile文件。MemStore的flush操作是由专门的线程负责的。
StoreFile
MemStore中的数据写到文件后就是StoreFile,StoreFile底层是以HFile文件的格式保存在HDFS上。
HFile
即HBase中键值对类型的数据均以HFile文件格式进行存储。
HLog
即预写日志文件,负责记录HBase修改。当HBase读写数据时,数据不是直接写进磁盘,而是会在内存中保留一段时间。这样,当数据保存在内存中时,很有可能会丢失。如果将数据写入预写日志文件中,然后再写入到内存中,一旦系统出现故障时,则可以通过这个日志文件恢复数据。