
【作者主页】Francek Chen
【专栏介绍】⌈ ⌈ ⌈大数据技术原理与应用 ⌋ ⌋ ⌋专栏系统介绍大数据的相关知识,分为大数据基础篇、大数据存储与管理篇、大数据处理与分析篇、大数据应用篇。内容包含大数据概述、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据库HBase、NoSQL数据库、云数据库、MapReduce、Hadoop再探讨、数据仓库Hive、Spark、流计算、Flink、图计算、数据可视化,以及大数据在互联网领域、生物医学领域的应用和大数据的其他应用。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/BigData_principle_application。
文章目录
一、HBase系统架构
HBase 的系统架构如图1所示,包括客户端、ZooKeeper 服务器、Master 主服务器、Region 服务器。需要说明的是,HBase 一般采用 HDFS 作为底层数据存储系统,因此图1中加入了 HDFS 和 Hadoop。

图1 HBase的系统架构
1. 客户端
客户端包含访问 HBase 的接口,同时在缓存中维护着已经访问过的 Region 位置信息,用来加快后续数据访问过程。
2. Zookeeper服务器
Zookeeper 可以帮助选举出一个 Master 作为集群的总管,并保证在任何时刻总有唯一一个 Master 在运行,这就避免了 Master 的"单点失效"问题。Zookeeper 是一个很好的集群管理工具,被大量用于分布式计算,提供配置维护、域名服务、分布式同步、组服务等。

图2 HBase的系统架构
3. Master
主服务器 Master 主要负责表和 Region 的管理工作:
- 管理用户对表的增加、删除、修改、查询等操作;
- 实现不同 Region 服务器之间的负载均衡;
- 在 Region 分裂或合并后,负责重新调整 Region 的分布;
- 对发生故障失效的 Region 服务器上的 Region 进行迁移;
4. Region服务器
Region 服务器是 HBase 中最核心的模块,负责维护分配给自己的 Region,并响应用户的读写请求。
二、Region服务器的工作原理
Region 服务器是 HBase 中最核心的模块,图3描述了 Region 服务器向 HDFS 中读写数据的基本原理。从图中可以看出,Region 服务器内部管理了一系列 Region 对象和一个 HLog 文件。其中 HLog 是磁盘上面的记录文件,它记录着所有的更新操作。每个 Region 对象由多个 Store 组成,每个 Store 对应表中的一个列族的存储。每个 Store 又包含一个 MemStore 和若干个 StoreFile。其中,MemStore 是在内存中的缓存,保存最近更新的数据;StoreFile 是磁盘中的文件,这些文件都是 B 树结构的,方便快速读取。在底层,StoreFile 通过 HDFS 的 HFile 实现,HFile 的数据块通常采用压缩方式存储,压缩之后可以大大减少网络 I/O 和磁盘 I/O。

图3 Region服务器向HDFS中读写数据
1. 用户读写数据的过程
当用户写入数据时,会被分配到相应的 Region 服务器去执行操作。用户数据首先被写入 MemStore 和 HLog 中,当操作写入 HLog 之后,commit() 调用才会将其返回给客户端。当用户读取数据时,Region 服务器会首先访问 MemStore 缓存,如果数据不在缓存中,才会到磁盘上面的 StoreFile 中去寻找。
2. 缓存的刷新
系统会周期性地把 MemStore 缓存里的内容刷写到磁盘的 StoreFile 文件中,清空缓存,并在 Hlog 里面写入一个标记。每次刷写都生成一个新的 StoreFile 文件,因此,每个 Store 包含多个 StoreFile 文件。每个 Region 服务器都有一个自己的 HLog 文件,每次启动都检查该文件,确认最近一次执行缓存刷新操作之后是否发生新的写入操作。如果发现更新,则先写入 MemStore,再刷写到 StoreFile,最后删除旧的 Hlog 文件,开始为用户提供服务。
3. StoreFile的合并
每次 MemStore 缓存的刷新操作都会在磁盘上生成一个新的 StoreFile 文件,这样,系统中的每个 Store 就会存在多个 StoreFile 文件。当需要访问某个 Store 中的某个值时,就必须查找所有 StoreFile 文件,非常耗费时间。因此,为了减少查找时间,系统一般会调用 Store.compact() 把多个 StoreFile 文件合并成一个大文件。由于合并操作比较耗费资源,因此只会在 StoreFile 文件的数量达到一个阈值的时候才会触发合并操作。
三、Store的工作原理
Region 服务器是 HBase 的核心模块,而 Store 是 Region 服务器的核心。每个 Store 对应了表中的一个列族的存储。每个 Store 包含一个 MemStore 缓存和若干个 StoreFile 文件。
MemStore 是排序的内存缓冲区,当用户写入数据时,系统首先把数据放入 MemStore 缓存,当 MemStore 缓存满时,就会刷新到磁盘中的一个 StoreFile 文件中。随着 StoreFile 文件数量的不断增加,当达到事先设定的数量时,就会触发文件合并操作,多个 StoreFile 文件会被合并成一个大的 StoreFile 文件。当多个 StoreFile 文件合并后,会逐步形成越来越大的 StoreFile 文件,当单个StoreFile 文件大小超过一定阈值时,就会触发文件分裂操作。同时,当前的一个父 Region 会被分裂成两个子 Region,父 Region 会下线,新分裂出的两个子 Region 会被 Master 主服务器分配到相应的 Region 服务器上。StoreFile 合并和分裂的过程如图4所示。

图4 StoreFile合并和分裂的过程
四、HLog工作原理
分布式环境必须要考虑系统出错。HBase 采用 HLog 保证系统恢复。HBase 系统为每个 Region 服务器配置了一个 HLog 文件,它是一种预写式日志(Write Ahead Log)。用户更新数据必须首先写入日志后,才能写入 MemStore 缓存,并且,直到 MemStore 缓存内容对应的日志已经写入磁盘,该缓存内容才能被刷写到磁盘。
Zookeeper 会实时监测每个 Region 服务器的状态,当某个 Region 服务器发生故障时,Zookeeper 会通知 Master。Master 首先会处理该故障 Region 服务器上面遗留的 HLog 文件,这个遗留的 HLog 文件中包含了来自多个 Region 对象的日志记录。系统会根据每条日志记录所属的 Region 对象对 HLog 数据进行拆分,分别放到相应 Region 对象的目录下,然后,再将失效的 Region 重新分配到可用的 Region 服务器中,并把与该 Region 对象相关的 HLog 日志记录也发送给相应的 Region 服务器。
Region 服务器领取到分配给自己的 Region 对象以及与之相关的 HLog 日志记录以后,会重新做一遍日志记录中的各种操作,把日志记录中的数据写入到 MemStore 缓存中,然后,刷新到磁盘的 StoreFile 文件中,完成数据恢复。共用日志优点:提高对表的写操作性能;缺点:恢复时需要分拆日志。
小结
HBase 系统架构含客户端、ZooKeeper、Master、Region 服务器,以 HDFS 为底层存储。Region 服务器是核心,其内部 Store 含 MemStore 和 StoreFile。用户读写涉及二者交互,还有缓存刷新、StoreFile 合并分裂。HLog 用于系统恢复,Zookeeper 监测 Region 服务器状态,故障时 Master 处理 HLog 完成数据恢复。
欢迎 点赞👍 | 收藏⭐ | 评论✍ | 关注🤗
