HBase属于存储层,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,可在廉价PC Server上搭建起大规模结构化存储集群。Hbase依托于很多框架和工具。其中,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理简单快捷。Sqoop为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移更灵活。
HBase的 Client客户端借助HBase的RPC机制与HMaster和HRegionServer进行通信,Zookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的存活状态。HMaster解决了单点故障问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作,包括管理用户对Table的增、删、改、查操作,管理HRegionServer的负载均衡,调整Region分布,在Region Split后负责新Region的分配,在HRegionServer停机后负责失效HRegionServer 上的Regions迁移。
HRegionServer职责是负责响应用户I/O请求,向HDFS文件系统中读写数据,属于HBase中最核心的模块。它内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,每个Column Family就是一个集中的存储单元,设计师最好将具备共同IO特性的column放在一个Column Family中,一般来说,我们只设置一个Column Family。HStore存储是HBase存储的核心,其中由两部分组成,一是MemStore,二是StoreFiles。MemStore是Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,所以HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。