HBase 采用常见的 Master-Slave(主-从)结构,HBase 构建在 HDFS 上的结构如下图:
HBase Structure
核心组件简要介绍(以下词义表示同样概念:HMaster=Master,HRegionServer=RegionServer=RS,HRegion=Region):
HMaster
- 负责 RegionServer 的负载均衡
- 为 RegionServer 分配 Region
- 发现失效的 RegionServer 并重新分配其上的 Region
- 管理用户对 Table 的增、删、改等操作
HRegionServer
- 管理由 HMaster 分配的 Region
- 处理对 RegionServer 上维护的 Region 的IO请求
HRegion
- Region 可看作是 Table 的水平切分,管理 Table 中的一段连续的 Rowkey (记录的唯一主键)
- Region 是 HBase 分布式存储和负载均衡以及其他特性实现的基本单位
- 同一个 Table 的不同的 Region 可以分别在不同的 RegionServer 上,同一个 Region 的数据不会在多个 RegionServer 上
HLog
- HBase 的 WAL(Write-Ahead Log)实现,每个 RegionServer 维护一个 HLog
- RegionServer 上的所有 Region 公用一个 HLog
MemStore
- Region 中维护的写缓存,数据会先写到 MemStore,满足一定条件时 flush 到文件中
HFile
- MemStore 每次 flush 时会生成新的 HFile,在 HDFS 上
- HDFS 会负责 HFile 的可用性
Client
- 客户端负责访问 HBase 的接口
- 会维护缓存信息加速 HBase 访问,如:Region 位置信息
- Client 访问数据通过 RegionServer(通过 Zookeeper 找到RS地址),不需要通过 HMaster
Zookeeper
- HBase HA 的解决方案,通过选举,保证任何时候集群中只有一个 Active Master
- Master 与 RegionServer 启动时会向 ZooKeeper 注册,存储所有 Region 的地址
- 实时监控 RegionServer 的上线和下线信息,实时通知给 Master
- 存储 HBase 的元数据
- Zookeeper 的引入使得 Master 不再是单点故障
HBase Table 的核心概念:
- Rowkey, 每条记录的唯一主键
- Column(列),无固定模式,可以动态添加,属于一个 ColumnFamily
- ColumnFamily(列族),对表的垂直切分,可以设置独立的特性。每个 ColumnFamily 的列数据对应一个 Memstore,由 Store 封装。
- Value,真实的数据,Rowkey 对应某一列的列值
- Version,版本号,每个 Value 有自己的版本,默认是更新数据的时间戳
Reference:
《HBase- The Defintive Guide》
《HBase权威指南》
网友评论