面试题答案
一键面试- 客户端发起更新请求:
- 客户端通过HBase API构建
Put
或Delete
操作对象,包含要更新的行键、列族、列限定符及新数据(对于Put
)等信息。 - 客户端使用
HConnection
实例与HBase集群建立连接。
- 客户端通过HBase API构建
- Region定位:
- 客户端首先访问
Zookeeper
,获取-ROOT-
表的位置。-ROOT-
表记录了meta
表的Region位置信息。 - 客户端再从
meta
表(.META.
)中查询要更新数据所在的Region位置。meta
表存储了所有用户表的Region与RegionServer的映射关系。
- 客户端首先访问
- 与RegionServer交互:
- 客户端将更新请求发送到对应的RegionServer。
- RegionServer接收到请求后,首先将更新操作写入预写式日志(WAL,Write - Ahead Log)。WAL用于保证数据的可靠性,即使RegionServer故障,也能通过重放日志恢复数据。
- 然后,更新操作被写入MemStore。MemStore是内存中的数据结构,按行键排序存储数据更新。当MemStore达到一定阈值(例如128MB,可配置)时,会触发Flush操作,将数据写入磁盘的StoreFile。
- 存储层面完成更新:
- Flush操作会将MemStore中的数据以HFile(StoreFile)的形式写入HDFS。HFile是HBase在HDFS上存储数据的格式,按照行键有序存储。
- 随着时间推移和数据更新,HDFS上会有多个HFile。Compaction操作会定期合并这些HFile,删除已标记删除的数据(对于
Delete
操作),并优化数据存储布局,最终完成数据在存储层面的更新。
主要涉及组件及交互过程总结:
组件 | 作用及交互 |
---|---|
客户端 | 构建更新请求,通过Zookeeper定位RegionServer,并发送请求 |
Zookeeper | 提供-ROOT- 表位置信息,协助客户端定位Region |
-ROOT- 表 | 存储meta 表Region位置 |
meta 表 | 存储用户表Region与RegionServer映射关系 |
RegionServer | 接收更新请求,写入WAL和MemStore,触发Flush和Compaction操作 |
WAL | 记录更新操作,保证数据可靠性 |
MemStore | 内存中临时存储更新数据 |
HDFS | 持久化存储数据,以HFile形式存储 |