首页 > 数据库 > 数据库开发技术 > HBase的架构初体验
HBase是基于HDFS存储的面向列,高可靠的分布式数据库,底层使用HDFS作为存储系统,使用MapReduce来作为计算框架,是大数据生态圈中比较常见的一个组件。也是从事大数据相关工作必须了解的一个组件,可以一起来初步了解一下HBase的整体架构。
整体上HBase的服务器体系遵从简单的主从服务器架构,由HRegion(HRegion Server)群和HBase Master服务器(HBase Master Server)构成,其中HBase Master服务器相当于集群的管理者,负责管理所有的HRegion 服务器,HRegion服务器相当于管理者手下的众多员工。HBase中所有的服务器都通过Zookeeper来进行协调,并处理HBase服务器运行期间可能遇到的错误,HBase Master Server 本身并不存储HBase中的任何数据,HBase逻辑上的表可能被划分为多个HRegion,然后存储到HRegion Server群中,HBase Master Server 中存储的是从数据到HRegion Server的映射。
HBase的架构图很多书籍和文章中都有,为了加深印象,自己又手动画了一遍,可参考如下。

结合上图,介绍一下各个组件的功能:
Client:通过RPC连接到集群,Client与Hmaster交互进行管理类的操作,Client与HRegionServer交互进行读写操作。
Zookeeper:记录表的位置,Hmaster的地址,并且HRegionServer会以Ephedral的方式注册到zookeeper上,这样Hmaster就可以随时感知HRegionServer的健康状态,客户端每次与HBase连接,都是先与ZooKeeper通信,查询出哪个RegionServer需要连接,然后再连接RegionServer。HBase自带ZooKeeper,且默认会启动自己的ZooKeeper,如果不使用HBase自带的ZooKeeper,需要在参数中设置。
Hmaster:可以启动多个,通过zookeeper的Master Election机制保证总有一个Master在运行,主要是做一些管理操作。如:管理用户对表的增删改查操作;管理RegionServer的负载均衡和调整regions分布;region split之后负责调整新的region分布;在RegionServer停机之后,负责失效机器上的region迁移。另外,客户端获取数据由客户端直连RegionServer的,Hmaster服务挂掉后依然可以查询数据,但是无法建表。
HRegionServer:负责客户端的读写IO请求,向HDFS读写数据,每个HRegionServer负责管理一些HRegion,每个HRegion对象对应Table表的region,每个HRegion有多个HStore组成,每个HStore对应Table中的一个Column Family的存储,其中Column Family是一个集中的存储单元,故将相同IO特性的Column放到同一个Column Family中会更加高效。
HStore:由两部分组成,MemStore和StoreFile,在Hbase中,数据在更新时会首先写入WAL日志和内存中,在内存中的数据是排序的,当MemStore积累到一定阈值的时候,就会创建一个新的MemStore,并且将老的MemStore添加到Flush队列中,有单独的线程flush到磁盘中,成为一个StoreFile。
StoreFile:StoreFile是只读的,一旦创建就无法修改,之后进来的数据,不管是 新增还是更新数据,都会经历内存到写到一个新的StoreFile的过程,随着StoreFile的数量一致积累到一定阈值,此时会触发Compact操作,即把所有的小文件(StoreFile)里面的数据根据row key进行版本合并和删除,生成一个大的StoreFile,单个StoreFile的大小超过一定的阈值,会触发Split操作,把当前的Region等分成两个Region,新的两个Region会被Hmaster分配到对应的HRegionServer上。
HLog:每个HRegionServer都有一个HLog对象,HLog实现了Write Ahead Log的类,每次用户写数据进来的时候,会先写到HLog文件中,同时也会写到MemStore中,当HRegionServer宕机之后,HMaster会通过zookeeper感知到,接下来HMaster的操作如下:
将遗留下来的HLog文件根据不同的Region拆分,然后放到对应的Region目录下,然后将这些Region重新分配到新的HRegionServer上,领取这些新的Region的HRegionServer会进行Load Region过程,期间会发现有历史HLog需要处理,因此会Reload HLog到MemStore中,然后flush到StoreFile中,完成数据恢复。
HBase的基本架构差不多就是这样了,你学会了嘛。
原文作者:DBA修行之路;如有侵权,请联系管理员删除。