HBase的核心模块介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013080251/article/details/61630910

众所周知,Hadoop框架包括两个核心组件:HDFS和MapReduce,其中HDFS是文件存储系统,负责数据存储;MapReduce是计算框架,负责数据计算。它们之间分工明确、低度耦合、相互关联。对于Hbase数据库的核心组件可以分为4个模块:客户端Client、协调服务模块zooKeeper、主节点HMaster、和Region节点RegionServer,这些组件的描述和相互之间的关联如下图:
Hbase架构图

下面是各个模块的详细介绍:

1.客户端Client
客户端Client是整个HBase系统给的入口。使用者直接通过客户端操作Hbase。客户端使用Hbase的RPC机制与HMaster和RegionServer进行通信。对于管理类操作,Client与HMaster进行RPC通信;对于数据读写类操作,Client与RegionServer进行RPC交互。这里客户端可以是多个,并不限定是原生Java结论,还有Thrift、Avro、Rest等客户端模式,甚至MapReduce也可以算作一种客户端。
2.协调服务组件ZooKeeper
Zookeeper Quorum(队列)负责HBase中多HMaster的选举、服务器之间状态的同步等。再具体一些就是,Hbase中Zookeeper实例负责的协调工作有:存储Hbase元数据信息、实时监控RegionServer、存储所有Region的寻址入口,当然还有最常见的功能就是保证Hbase集群中只有一个HMaster节点。
3.主节点HMaster
HMaster没有单点问题,在Hbase中可以启动多个HMaster,通过Zookeeper的Master选举机制保证总有一个Master正常运行并提供服务,其他HMaster作为备选时刻准备(当目前HMaster出现问题时)提供服务。HMaster主要负责Table和Region的管理工作:

  • 管理用户对Table的增、删、改、查操作。
  • 管理RegionServer的负载均衡,调整Region分布。
  • 在Region分裂后,负责新region 的分配。
  • 在RegionServer死机后,负责失效RegionServer上的Region迁移。

4.Region节点HRegionServer
HRegionServer主要负责相应用户I/O请求,向HDFS文件系统中读写数据,是HBase汇总最核心的模块。HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region。HRegion由多个HStore组成,每个HStore对应了Table中的而一个Column Family的存储。可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同I/O特性的列放在一个Column Family中,这样保证读写的高效性。HRegionServer的组成结构如下图所示:
HRegionServer的组成结构图

HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。
每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

阅读更多
换一批

没有更多推荐了,返回首页