作者:hyuan 文章转自:大数据手稿笔记
最近在网上看到一篇很好的讲 HBase 架构的文章(原文:https://mapr.com/blog/in-depth-look-hbase-architecture/) , 简洁明了 , 图文并茂 , 所以这里将其翻译成中文分享 。图片引用的是原文中的 , 技术性术语会尽量使用英文 , 在比较重要的段落后面都会加上我个人理解的点评 。
HBase 架构组件
物理上 , Hbase 是由三种类型的 server 组成的的主从式(master-slave)架构:
- Region Server 负责处理数据的读写请求 , 客户端请求数据时直接和 Region Server 交互 。
- HBase Master 负责 Region 的分配 , DDL(创建 , 删除 table)等操作 。
- Zookeeper , 作为 HDFS 的一部分 , 负责维护集群状态 。
- Hadoop DataNode 负责存储 Region Server 所管理的数据 。所有的 HBase 数据都存储在 HDFS 文件中 。Region Server 和 HDFS DataNode 往往是分布在一起的 , 这样 Region Server 就能够实现数据本地化(data locality , 即将数据放在离需要者尽可能近的地方) 。HBase 的数据在写的时候是本地的 , 但是当 region 被迁移的时候 , 数据就可能不再满足本地性了 , 直到完成 compaction , 才能又恢复到本地 。
- Hadoop NameNode 维护了所有 HDFS 物理 data block 的元信息 。
文章插图
Regions
HBase 表(Table)根据 rowkey 的范围被水平拆分成若干个 region 。每个 region 都包含了这个region 的 start key 和 end key 之间的所有行(row) 。Regions 被分配给集群中的某些节点来管理 , 即 Region Server , 由它们来负责处理数据的读写请求 。每个 Region Server 大约可以管理 1000 个 regions 。
文章插图
HBase Master
也叫 HMaster , 负责 Region 的分配 , DDL(创建 , 删除表)等操作:
统筹协调所有 region server:
- 启动时分配 regions , 在故障恢复和负载均衡时重分配 regions
- 监控集群中所有 Region Server 实例(从 Zookeeper 获取通知信息)
- 提供创建 , 删除和更新 HBase Table 的接口
文章插图
Zookeeper
HBase 使用 Zookeeper 做分布式管理服务 , 来维护集群中所有服务的状态 。Zookeeper 维护了哪些 servers 是健康可用的 , 并且在 server 故障时做出通知 。Zookeeper 使用一致性协议来保证分布式状态的一致性 。注意这需要三台或者五台机器来做一致性协议 。
文章插图
这些组件是如何一起工作的
Zookeeper 用来协调分布式系统中集群状态信息的共享 。Region Servers 和 在线 HMaster(active HMaster)和 Zookeeper 保持会话(session) 。Zookeeper 通过心跳检测来维护所有临时节点(ephemeral nodes) 。
文章插图
每个 Region Server 都会创建一个 ephemeral 节点 。HMaster 会监控这些节点来发现可用的 Region Servers , 同样它也会监控这些节点是否出现故障 。
HMaster 们会竞争创建 ephemeral 节点 , 而 Zookeeper 决定谁是第一个作为在线 HMaster , 保证线上只有一个 HMaster 。在线 HMaster(active HMaster) 会给 Zookeeper 发送心跳 , 不在线的待机 HMaster (inactive HMaster) 会监听 active HMaster 可能出现的故障并随时准备上位 。
如果有一个 Region Server 或者 HMaster 出现故障或各种原因导致发送心跳失败 , 它们与 Zookeeper 的 session 就会过期 , 这个 ephemeral 节点就会被删除下线 , 监听者们就会收到这个消息 。Active HMaster 监听的是 region servers 下线的消息 , 然后会恢复故障的 region server 以及它所负责的 region 数据 。而 Inactive HMaster 关心的则是 active HMaster 下线的消息 , 然后竞争上线变成 active HMaster 。
点评:这一段非常重要 , 涉及到分布式系统设计中的一些核心概念 , 包括集群状态、一致性等 。可以看到 Zookeeper 是沟通一切的桥梁 , 所有的参与者都和 Zookeeper 保持心跳会话 , 并从 Zookeeper 获取它们需要的集群状态信息 , 来管理其它节点 , 转换角色 , 这也是分布式系统设计中很重要的思想 , 由专门的服务来维护分布式集群状态信息 。
推荐阅读
- 中国最大的黄鳝38斤 世界上最大的黄鳝有多重
- 一个进程开启多少线程最好
- 最实用的家庭储藏茶叶的方法
- 铁观音的最佳储存方法
- 一小时搭建微信聊天机器人
- 古希腊旧喜剧古典时期的喜剧最重要的作家是谁 古希腊三大喜剧家及其代表作
- 儿童疱疹性咽喉炎
- 梦见高考迟到但最终进了考场 梦见高考迟到是什么意思
- 去惠州罗浮山哪个寺庙最好 梅州灵光寺风景区
- 大红袍的最佳储存方法