🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
<mark>HBase 也是 Master/slaves 架构</mark>,从前面安装环境应该能看出,HBase 分布式环境安装成功后,是有一个 HMaster,多个 HResgionServer 进程。HBase 架构如图所示: ![](https://img.kancloud.cn/4d/52/4d529da7c8bc0bec994e2b3aedbc2cc8_1312x732.png) 从上图中能看出 HBase 是由 Client、ZooKeeper、HMaster、HRegionServer、HDFS 等几个组件组成,组件的相关功能: <br/> 1. **Client:客户端,可以是 HBase Shell、Java API 客户端、RestAPI 等**。 <mark>Client 就是用来访问 HBase 数据库的</mark>,它不仅提供了访问接口,还维护了对应的缓存(cache)来加速 HBase 的访问。Client 端的缓存主要是缓存 Region 的位置信息,减少获取元数据的时间。当 Client 端没有缓存的时候(第一次请求),会加载 Region 的位置信息到 Client 端,后面直接使用 cache 中的信息,如果出现重试,则会重新获取 Region 的位置信息,更新 Client 端的 cache。 2. **ZooKeeper** HBase 通过 ZooKeeper 来做 HMaster 的高可用、HRegionServer 的监控、元数据的入口以及集群配置的维护等工作。它具体工作如下: (1)通过 ZoopKeeper 来保证集群中只有 1 个 HMaster 在运行,如果 HMaster异常,会通过竞争机制产生新的 HMaster 提供服务。 (2)通过 ZoopKeeper 来监控 HRegionServer 的状态,当 HRegionSevrer 有异常的时候,通过 HMaster的消息通知,获取HRegionServer 上下线的信息。 (3)通过 ZoopKeeper 存储元数据的统一入口地址。 3. **HMaster** HMaster 节点的主要职责如下: (1)监 控 HRegionServer ,处理 HRegionServer 故 障 转 移 , 当 某 个HRegionServer 挂掉时,ZooKeeper 会将分配在该 HRegionServer 上的 HRegion 分配到其他 HRegionServer 上进行管理。 (2)HRegion 分裂后,负责新的 HRegion 的分配。 (3)处理元数据的变更,比如对表的创建、添加,修改,删除等操作。 (4)在空闲时间进行数据的负载均衡,主要就是在 HRegionServer 间迁移HRegion,达到负载均衡。 (5)通过 ZooKeeper 发布自己的位置给客户端。 4. **HRegionServer** HRegionServer 直接负责用户的读写请求,是真正的<mark>干活</mark>的节点。它的功能概括如下: (1)负责和底层 HDFS 的交互,存储数据到 HDFS,HBase 是依托于 HDFS的 NoSQL 数据库,数据会存储在 HDFS 上。 (2)处理分配给它的 HRegion。 (3)刷新缓存到 HDFS。 (4)维护 HLog,HLog 是一个容错机制。 (5)处理来自客户端的读写请求。HRegionServer 是实际管理数据的,所以客户端的读写请求最终都要由 HRegionServer 来处理。 (6)负责处理 HRegion 变大后的拆分。 (7)负责 StoreFile 的合并工作。 5. **HDFS** HDFS 为 HBase 提供最终的底层数据存储服务,同时为 HBase 提供高可用(HLog 存储在 HDFS)的支持,具体功能概括如下: (1)提供元数据和表数据的底层分布式存储服务。 (2)数据多副本,保证的高可靠和高可用性。 6. **Write-Ahead Logs** Write-Ahead Logs 也叫预写日志,在 HBase 中为 HLog,HLog 存储在 HDFS 上。 为什么存在要有预写日志呢?其实跟 HBase 架构设计有关,当对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据在写入内存之前会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。<mark>需要注意的是,HLog 是每一个 RegionServer 对应一个。</mark> 7. **HRegion** HRegion 可以看成是表的横向切分,HBase 表的分片,HBase 每个表都会根据 RowKey 值被切分成不同的 HRegion 分散存储在 HRegionServer 中,在一个HRegionServer 中可以有多个不同的 HRegion。这些 HRegion 可以是来自不同的表。HRegion、Table、HRegionServer 关系如下面的图所示。 ![](https://img.kancloud.cn/83/df/83df5bb70c967fbff23ca92d90de2b5b_731x427.png) <mark>值得注意的是,一个 HRegion 只能在一个 HRegionServer 上,不能跨多个HRegionServer。</mark> 8. **Store** 每一个 Region 内部,又分为多个 Store,一个 Store 对应表中的一个列族。也就是说一个 Store 存储了对应表该列族下的部分数据。 9. **MemStore** 顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在 HLog中之后,HRegsionServer 会在内存中存储键值对。 10. **HFile** 这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以 HFile 的形式存储在 HDFS 的。文件内容是二进制。