HBase 架构组件
物理上,Hbase 是由三种类型的 server 组成的的主从式(master-slave)架构:
- Region Server 负责处理数据的读写请求,客户端请求数据时直接和 Region Server 交互。
- HBase Master 负责 Region 的分配,DDL(创建,删除 table)等操作。
- Zookeeper,作为 HDFS 的一部分,负责维护集群状态。
当然底层的存储都是基于 Hadoop 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)