第一次读和写操作
有一个特殊的 HBase Catalog 表叫 Meta table(它其实是一张特殊的 HBase 表) , 包含了集群中所有 regions 的位置信息 。Zookeeper 保存了这个 Meta table 的位置 。
当 HBase 第一次读或者写操作到来时:
- 客户端从 Zookeeper 那里获取是哪一台 Region Server 负责管理 Meta table 。
- 客户端会查询那台管理 Meta table 的 Region Server , 进而获知是哪一台 Region Server 负责管理本次数据请求所需要的 rowkey 。客户端会缓存这个信息 , 以及 Meta table 的位置信息本身 。
- 然后客户端回去访问那台 Region Server , 获取数据 。
文章插图
点评:客户端读写数据 , 实际上分了两步:第一步是定位 , 从 Meta table 获取 rowkey 属于哪个 Region Server 管理;第二步再去相应的 Region Server 读写数据 。这里涉及到了两个 Region Server , 要理解它们各自的角色功能 。关于 Meta table 下面会详细介绍 。HBase Meta Table
Meta table 是一个特殊的 HBase table , 它保存了系统中所有的 region 列表 。这张 table 类似一个 b-tree , 结构大致如下:
- Key:table, region start key, region id
- Value:region server
文章插图
Region Server 组成
Region Server 运行在 HDFS DataNode 上 , 由以下组件组成:
- WAL:Write Ahead Log 是分布式文件系统上的一个文件 , 用于存储新的还未被持久化存储的数据 , 它被用来做故障恢复 。
- BlockCache:这是读缓存 , 在内存中存储了最常访问的数据 , 是 LRU(Least Recently Used)缓存 。
- MemStore:这是写缓存 , 在内存中存储了新的还未被持久化到硬盘的数据 。当被写入硬盘时 , 数据会首先被排序 。注意每个 Region 的每个 Column Family 都会有一个 MemStore 。
- HFile 在硬盘上(HDFS)存储 HBase 数据 , 以有序 KeyValue 的形式 。
文章插图
点评:这一段是重中之重 , 理解 Region Server 的组成对理解 HBase 的架构至关重要 , 要充分认识 Region Server 的功能 , 以及每个组件的作用 , 这些组件的行为和功能在后续的段落中都会一一展开 。HBase 写数据步骤
当客户端发起一个写数据请求(Put 操作) , 第一步首先是将数据写入到 WAL 中:
- 新数据会被追加到 WAL 文件尾部 。
- WAL 用来在故障恢复时恢复还未被持久化的数据 。
文章插图
数据被写入 WAL 后 , 会被加入到 MemStore 即写缓存 。然后服务端就可以向客户端返回 ack 表示写数据完成 。
点评:注意数据写入时 WAL 和 MemStore 更新的顺序 , 不能调换 , 必须先 WAL 再 MemStore 。如果反过来 , 先更新完 MemStore , 此时 Region Server 发生 crash , 内存中的更新就丢失了 , 而此时数据还未被持久化到 WAL , 就无法恢复了 。理论上 WAL 就是 MemStore 中数据的一个镜像 , 应该保持一致 , 除非发生系统 crash 。另外注意更新 WAL 是在文件尾部追加的方式 , 这种磁盘操作性能很高 , 不会太影响请求的整体响应时间 。
文章插图
HBase MemStore
MemStore 在内存中缓存 HBase 的数据更新 , 以有序 KeyValues 的形式 , 这和 HFile 中的存储形式一样 。每个 Column Family 都有一个 MemStore , 所有的更新都以 Column Family 为单位进行排序 。
文章插图
HBase Region Flush
推荐阅读
- 中国最大的黄鳝38斤 世界上最大的黄鳝有多重
- 一个进程开启多少线程最好
- 最实用的家庭储藏茶叶的方法
- 铁观音的最佳储存方法
- 一小时搭建微信聊天机器人
- 古希腊旧喜剧古典时期的喜剧最重要的作家是谁 古希腊三大喜剧家及其代表作
- 儿童疱疹性咽喉炎
- 梦见高考迟到但最终进了考场 梦见高考迟到是什么意思
- 去惠州罗浮山哪个寺庙最好 梅州灵光寺风景区
- 大红袍的最佳储存方法