Hbase 核心功能组件

Hbase 核心功能组件

Client

  • 是整个Hbase系统的入口
  • 使用者通过客户端操作 HBase。客户端使用 Hbase 的 RPC 机制与 HMaster 和 RegionServer 进行通信。
  • 对于管理类(表的增删)操作, Client 与 HMaster 进行 RPC 通信; 对于读写类操作, Client 与 RegionServer 进行 RPC 交互
  • 这里客户端可以是多个, 并不限定是原生JAVA接口, 还有 Thrift、Avro、Rest等客户端模式,甚至 MapReduce 也可以算是一种客户端

Zookeeper

  • Zookeeper负责消息协调通信-------由雅虎公司开发出的
  • Zookeeper是一个高可用的分布式数据管理与系统协调框架。
  • Zookeeper底层基于Paxos算法的实现,使的该框架保证了分布式环境中数据的一致性。
  • Zookeeper Quorum(队列)负责管理 HBase 中多 HMaster的选举、服务器之间状态同步等。 具体讲:存储 HBase 元数据信息、实时监控 RegionServer、存储所有 Region 的寻址入口,保证HBase 集群中只有一个 HMaster节点(最常见功能)。
  • Zookeeper管理配置工具。
  • Zookeeper 中管理的集群服务器,服务器分成只有Leader,Follower。
    Leader管理follower,服务分发给各个follower干活。

主节点 HMaster

  • HMaster 主要负责 Table 和 Region 的管理工作:HBase中可以启动多个 HMaster,通过 Zookeeper 的选举机制保证总有一个 Master 正常运行并提供服务, 其他 HMaster 作为备选时刻准备提供服务。
  • 管理用户对表的增删改查操作
  • 管理 RegionServer 的负载均衡, 调整 Region 分布
  • 在 Region 分裂后, 负责新 Region 的分配
  • 在 RegionServer 死机后,负责失效 RegionServer 上的 Region 迁移。

HRegionServer

  • HRegionServer 主要负责响应用户 I/O 请求, 向 HDFS 文件系统中读写数据,是 HBase 中最核心的模块。
  • HRegionServer内部管理了一系列的HRegion对象。每个HRegion对应了表中的一个Region。
  • HRegion中由多个Hstore组成。
  • 每个Hstore对应了表中的一个列簇(ColumnFamily)的存储

可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同I/O特性的列放在一个Column Family中,这样能保证读写的高效性。

Hbase 核心功能组件

HLog

一个RegionServer中包含唯一的一个HLog实例,HLog用于实现预写日志。

由于数据要经 MemStore 排序后才能刷写到 HFile,但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile 的文件中,然后再写入MemStore 中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

HLog的功能

HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,HLog文件定期会滚动出新,并删除旧的文件(已持久化到StoreFile中的数据)。在HRegionServer意外终止后,HMaster会通过ZooKeeper感知到,首先处理遗留的HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应Region的目录下,然后再将失效的Region重新分配,领取到这些Region的HRegionServer在加载Region的过程中,会发现有历史HLog需要处理,因此会将HLog中的数据回放到MemStore中,然后缓冲(flush)到StoreFiles,完成数据恢复。

g需要处理,因此会将HLog中的数据回放到MemStore中,然后缓冲(flush)到StoreFiles,完成数据恢复。

Store

Region里包含了很多Store,Store对应于HBase表的列族。包括MemStore和StoreFile。

MemStore

Store中包含了一个MemStore,它是内存式的数据结构,用户数据进入Region之后,先会刷写到MemStore中,当MemStore的数据装满之后,会把数据刷写到StoreFile中。

MemStore的大小为64MB

StoreFile

缓存中的数据足够多以后会flush至硬盘形成StoreFile.是保存实际数据的物理文件,StoreFile 以HFile 的形式存储在HDFS 上。每个Store 会有一个或多StoreFile(HFile),数据在每个StoreFile 中都是有序的。

当Store File文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除。因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的Compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。

合并分为小合并和大合并

  • 小合并是将若干HFile合并为一个大文件
  • 大合并是将所有的HFile合并为一个大文件

storeFile合并是hbase为了防止小文件(被刷到磁盘的menstore)过多,以保证保证查询效率,hbase需要在必要的时候将这些小的store file合并成相对较大的store file

HFile

是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以Hfile的形式存储在HDFS的,其内在是键值对形式。