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) 会给 Zookeep