面试题答案
一键面试- 客户端请求:
- 客户端通过 HBase API 构建 Put 请求,包含要写入的表名、行键、列族、列限定符和值等信息。
- 客户端使用 HConnection 来定位目标 Region 所在的 RegionServer。这一过程涉及到访问 ZooKeeper 获取 -ROOT- 表位置,进而定位.META. 表,最终找到目标 Region 所在的 RegionServer 地址。
- RegionServer 接收请求:
- RegionServer 接收客户端发送的写请求。
- 首先将请求写入到预写式日志(WAL,Write - Ahead Log)。WAL 用于确保数据在发生故障时能够恢复,它按照顺序记录所有的写操作。每个 RegionServer 有一个共享的 WAL 日志文件。
- MemStore 写入:
- 写操作成功写入 WAL 后,数据会被写入到对应的 Region 的 MemStore 中。MemStore 是一个内存中的数据结构,按照行键排序存储写入的数据。
- 当 MemStore 达到一定的阈值(默认是 128MB)时,会触发 MemStore 的 Flush 操作。
- MemStore Flush:
- MemStore 中的数据被刷写到 HDFS 上,形成 HFile。HFile 是 HBase 在 HDFS 上存储数据的文件格式,它是一种列式存储格式,以键值对的形式存储数据。
- Flush 操作会创建一个新的 HFile,并将 MemStore 中的数据写入该文件。写入完成后,MemStore 被清空,等待接收新的写请求。
- 数据持久化存储:
- HFile 被存储在 HDFS 上,具体路径为
/hbase/data/{tableName}/{regionName}/{storeName}/{version}/
目录下。 - 多个 HFile 可能会随着时间不断生成,RegionServer 会定期执行 Compaction 操作。Minor Compaction 会合并较小的 HFile,Major Compaction 会合并一个 Store 下的所有 HFile,消除过期数据和 tombstone(标记删除的数据),最终实现数据在 HDFS 上的持久化存储。
- HFile 被存储在 HDFS 上,具体路径为