1. HBase 架构
1.1. 列式存储
- 关于本节,可参考文章 《OLAP:行式存储 & 列式存储》。
1.2. HBase 架构图
1.3. Client 客户端
- Client 提供了访问 HBase 的接口;
- Client 维护了对应的 cache 来加速 HBase 的访问;
1.4. Zookeeper
- 存储 HBase 的元数据(meta 表);
- 无论是读还是写数据,都是去 Zookeeper 里边拿 meta 元数据;、
- Zookeeper 告诉给客户端去哪台机器读写数据;
1.5. HRegionServer
- HRegionServer 处理客户端的读写请求;
-
负责与 HDFS 底层交互,是真正干活的节点。
- HBase 之所以能存储海量的数据,是因为 HBase 是分布式的。
- HBase一张表的数据会分到多台机器上的。那HBase是怎么切割一张表的数据的呢?用的就是RowKey来切分,其实就是表的横向切割。
- 一个HRegion上,存储HBase表的一部分数据。
1.6. HMaster
- HMaster 会处理元数据的变更、监控 RegionServer 的状态、处理 HRegion 的分配或转移;
- 如果我们 HRegion 的数据量太大的话,HMaster 会对拆分后的 Region 重新分配 RegionServer;
- 如果发现失效的 HRegion,也会将失效的 HRegion 分配到正常的 HRegionServer 中;
1.3. HBase 数据流程
- client 请求到 Zookeeper;
- Zookeeper 查找 meta 元数据,返回 HRegionServer 地址给 client;
- client 得到 Zookeeper 返回的地址去请求 HRegionServer;
- HRegionServer 读写数据,并返回结果给 client。
1.4. HRegionServer
2. HBase 数据模型
2.1. HBase 列族 & 列
- HBase 里边也有表、行和列的概念
- HBase 一行数据,由一个行键(RowKey)、一个或多个相关的列以及它的值所组成;
- 在 HBase 里边,定位一行数据会有一个唯一的值,这个叫做行键(RowKey)。
- HBase 的列,不是我们在关系型数据库所想象中的列
- HBase 的列(Column)归属到列族(Column Family)中;
- 在 HBase 中用列修饰符(Column Qualifier)来标识每个列;
-
在 HBase 里,先有列族,后有列,在列族下用列修饰符来标识一列。
-
HBase表的每一行中,列的组成都是灵活的,行与行之间的列不需要相同。
-
一个列族下可以任意添加列,不受任何限制。
2.2. HBase 数据时间戳
- 数据写到 HBase 的时候,都会被记录一个时间戳,这个时间戳被我们当做一个版本;
-
比如:我们修改或者删除某一条的时候,本质上是往里边新增一条数据,记录的版本加一了而已。
-
2.3. HBase Key-Value 结构
- Key
- 由 RowKey(行键)+ColumnFamily(列族)+Column Qualifier(列修饰符)+TimeStamp(时间戳–版本)+KeyType(类型)组成
- Value
- Value 就是实际上的值。