本文系转载,如有侵权,请联系我:likui0913@gmail.com

一、HBase 组件概览

Master-Slave 模式: HBase 体系结构遵循传统的 master-slave 模式,由一位掌握决策的主设备和一个或多个真正处理任务的从设备组成。在 HBase 中,主设备称为 HMaster,从设备被称为 HRegionServers,主从设备之间则通过 Zookeeper 共享状态信息。

HBase 组成: 从物理层面,HBase 由 3 个部分:

  • Region Servers
  • HBase Master
  • Zookeeper

它们在程序中的实现分别为:

  • HRegionServers 节点
  • HMaster 节点
  • Zooeeper 节点

Region Servers 为客户端的读写提供数据,访问数据时,客户端直接与 Region Servers 通信。Region 分配、DDL(创建、删除表)操作则由 HBase Master 处理。Zookeeper 作为 HDFS 的一部分,维护者一个活动的集群的状态。

所有的 HBase 数据都存储在 HDFS 中,即 DataNode 负责存储 RegionServers 正在管理的数据。实际的架构中,会在每个 DataNode 节点上部署一个对应的 RegionSevers,这使得 RegionSevers 所管理的数据距离实际的存储更接近,这也符合了 HDFS 目标之一:移动计算而非移动数据。

HRegionServers

RegionServers 主要负责服务和管理 Regions,它提供面向数据和 Region 维护的方法,其中包括:

  • 数据的读写、删除等
  • Region 的分离(Split)、压缩(compact)等

Region

Region 是 Table 可用性和分布的基本元素,由每个列族(ColumnFamily)的一个库(Store) 组成。其对象层级如下:

- Table
- Region
- Store(由每个 Region 中的列族组成的存储块)
- MemStore(每个 Region 中存储在内存中的 Store)
- StoreFile(每个 Region 中被持久化后的 Store)
- Block (StoreFile 内被分块存储后的块)

分区存储: HBase 按照行键(RowKey)范围水平划分 Regions,一个 Region 包含了该 Region 的 startKey (开始键)到 endKey (结束键)之间的所有行。这些 Region 被分配给各个 RegionServers,每个 RegionServer 可以服务约 1000 个 Region。

HMaster

HMaster 是 Master Server 的实现,它负责监视集群中的所有 RegionServer 实例,并且提供所有元数据更改的接口。HMaster 主要功能包括:

  • 协调 RegionServer

    • 在启动时分配 Region、重新分配 Region 以恢复或负载均衡
    • 监控集群中的所有 RegionServers 节点(侦听来自 Zookeeper 的通知)
  • 管理功能
    • 提供创建、修改、删除、启动、禁用 table 的接口
    • 管理 namesapce 和 table 的元数据
    • 管理 Region 的移动、分配、取消分配
    • 权限控制

同时,HMaster 运行着几个后台进程,包括:

  • 负载平衡器(LoadBalancer): 定期地,如果没有任何 Region 被转换时,负载平衡器将运行并移动 Region 平衡集群负载;
  • Catalog Janitor: 定期检查并清理 .META 表。

Zookeeper

HBase 使用 Zookeeper 作为分布式协调服务来维护集群中的服务器状态。Zookeeper 维护哪些服务器处于活动状态并可用,并提供服务器故障通知。Zookeeper 使用共识来保证共同的共享状态。根据 Zookeeper 使用的 Paxos 算法特性,至少应该有三至五台机器达成共识。

二、组件间如何协同工作

使用 Zookeeper 共享成员信息: HBase 使用 Zookeeper 来协调 HMasters 与 RegionServers 成员的共享状态信息。RegionServers 和活动状态的 HMaster 通过会话连接到 Zookeeper,并在 Zookeeper 上创建一个临时节点以表示其处于活动状态。Zookeeper 则通过接收各成员的心跳信息来维护会话的临时节点,如果RegionServers 或活动的 HMaster 未能向 Zookeeper 发送心跳,则代表会话过期,Zookeeper 将删除相应的临时节点。HMaster 通过监听 Zookeeper 上 RegionServer 创建的临时节点来发现可用的 RegionServer,并监控这些节点的服务器故障。

HMaster 选举: HMaster 通过争夺创建一个短暂的节点,Zookeeper 会选择第一个来确保只有一个 HMaster 处于活动状态。活动的 HMaster 将心跳发送到 Zookeeper,非活动状态的 HMaster 将监听活动的 HMaster 故障的通知,一旦发现活动的 HMaster 失败,则非活动的 HMaster 将变为活动状态。

三、RegionServers 的组件

RegionServer 作为管理 Region,并直接与客户端传输数据的节点,其运行在 HDFS 的 DataNode 节点之上,并具有以下组件:

  • WAL: 预写日志,用于存储尚未被永久保存的新数据,它以文件的形式存储在分布式文件系统(通常是 HDFS)上,其主要作用是用于故障后的恢复;
  • BlockCache: 读取缓存,它将频繁读取的数据存储在内存中,用以加快客户端的读取速度。最近最少使用的数据将在 BlockCache 满时被逐出,其默认的最大值为 Java 堆大小 * 0.4,默认的缓存方式为 LruBlockCache(一种完全在 Java 堆内的缓存,另外一种方式为 BucketCache);
  • MemStore: 写入缓存,它存储尚未写入磁盘的新数据,用以减少磁盘 IO 频率。它在写入磁盘之前将进行排序。++每个 Region 的每个列族都有一个 MemStore。++
  • HFiles: 用于将行数据作为已排序的 KeyValues 结构存储在磁盘上的最终文件,一个 Region 通常包含多个 HFile。

HFile (StoreFile)

HBase 的数据最终被存储在 HFile 中,HFile 是保存在 HDFS 中的物理文件(默认大小为 128M),它包含已经排序过的 KeyVelue 数据。

注:HFile 中的数据是有序的,但同一个 Region 下的所有 HFile 并不一定是连续有序的。

当 MemStore 累积足够的数据时(默认为128M),整个已排序的 KeyValues 集将被写入 HDFS 中的新的 HFile 文件中(这是一个顺序写入,避免了移动磁盘驱动器磁头,所以它的速度会非常快)。

KeyVelue

KeyVelue 类是 HBase 中数据存储的核心。KeyVelue 包装一个字节数组,并将偏移量和长度放入传递的数组中,指定将内容开始解释为 KeyVelue 的位置。

字节数组中的 KeyVelue 数据结构表现为:

{
keylength,
valuelength,
key: {
rowLength,
row (i.e., the rowkey),
columnfamilylength,
columnfamily,
columnqualifier,
timestamp,
keytype (e.g., Put, Delete, DeleteColumn, DeleteFamily)
}
value

注:keytype 用来标识数据操作类型,当删除操作发生时,HBase 新建一条相同的数据,并使 keytype=delete,便代表了此数据被删除。

Block

StoreFile(HFile) 由 block 组成,block 的大小基于每个 ColumnFamily 进行配置,可在创建表时指定,默认大小为 64 KB。数据压缩也是发生在 block 级别。

HFile 结构

HFile 包含一个多层索引,它允许 HBase 在不必读取整个文件的情况下查找数据。多级索引就像一颗 B+ 树,它具有如下特点:

  • KeyValue 对按升序存储
  • 索引指向包含 KeyValue 数据的“block”(默认大小为 64KB)
  • 每个 block 都有自己的叶子索引(Leaf ndex)
  • 每个 block 的最后一个 key 放在中间索引(Intermediate index)中
  • 根索引指向中间索引

同时,文件的结尾包含一个 trailer 信息,它指向所有的块。并且该 tariler 还具有 Bloom 过滤器和时间范围等信息。Bloom 过滤器有助于跳过不包含某个行键的文件。如果文件不再读取的时间范围内,则时间范围信息对于跳过该文件非常有用。

注:一个 keyValue 不会在 block 之间被拆分,即如果一个 KeyValue 大小为 8M,即使 block 大小设置是 64KB,这个 KeyValue 也将作为一个连贯的 block 被存储。

HFile 索引

HFile 的索引是在 HFile 打开并保存在内存中时被加载的,它被保存在 BlockCache(即读取缓存)中,这就允许通过单个磁盘寻道来执行查找功能。

参考链接

HBase 架构与工作原理2 - HBase 组件的更多相关文章

  1. HBase 架构与工作原理3 - HBase 读写与删除原理

    本文系转载,如有侵权,请联系我:likui0913@gmail.com 一.前言 在 HBase 中,Region 是有效性和分布的基本单位,这通常也是我们在维护时能直接操作的最小单位.比如当一个集群 ...

  2. HBase 架构与工作原理1 - HBase 的数据模型

    本文系转载,如有侵权,请联系我:likui0913@gmail.com 一.应用场景 HBase 与 Google 的 BigTable 极为相似,可以说 HBase 就是根据 BigTable 设计 ...

  3. HBase(三)HBase架构与工作原理

    一.系统架构 注意:应该是每一个 RegionServer 就只有一个 HLog,而不是一个 Region 有一个 HLog. 从HBase的架构图上可以看出,HBase中的组件包括Client.Zo ...

  4. HBase 架构与工作原理5 - Region 的部分特性

    本文系转载,如有侵权,请联系我:likui0913@gmail.com Region Region 是表格可用性和分布的基本元素,由列族(Column Family)构成的 Store 组成.对象的层 ...

  5. HBase 架构与工作原理4 - 压缩、分裂与故障恢复

    本文系转载,如有侵权,请联系我:likui0913@gmail.com Compacation HBase 在读写的过程中,难免会产生无效的数据以及过小的文件,比如:MemStore 在未达到指定大小 ...

  6. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  7. 转载:【Oracle 集群】RAC知识图文详细教程(三)--RAC工作原理和相关组件

    文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...

  8. 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    原文地址:http://www.cnblogs.com/baiboy/p/orc3.html 阅读目录 目录 RAC 工作原理和相关组件 ClusterWare 架构 RAC 软件结构 集群注册(OC ...

  9. CPU处理器架构和工作原理浅析

    CPU处理器架构和工作原理浅析 http://c.biancheng.net/view/3456.html 汇编语言是学习计算机如何工作的很好的工具,它需要我们具备计算机硬件的工作知识. 基本微机设计 ...

随机推荐

  1. 三层BP神经网络的python实现

    这是一个非常漂亮的三层反向传播神经网络的python实现,下一步我准备试着将其修改为多层BP神经网络. 下面是运行演示函数的截图,你会发现预测的结果很惊人! 提示:运行演示函数的时候,可以尝试改变隐藏 ...

  2. C++中各个后缀名文件的作用

    1.tlb.tlh和tli文件的关系   tlb文件:com类型库文件.在需要使用对应com类的模块里,“#import ...*.tlb”使用之.tlh.tli文件:他们是vc++编译器解析tlb文 ...

  3. 4827: [Hnoi2017]礼物

    4827: [Hnoi2017]礼物 链接 分析: 求最小的$\sum_{i=1}^{n}(x_i-y_i)^2$ 设旋转了j位,每一位加上了c. $\sum\limits_{i=1}^{n}(x_{ ...

  4. 2115: [Wc2011] Xor

    2115: [Wc2011] Xor 链接 分析: 对于图中的一个环,是可以从1到这个环,转一圈然后在回到1的,所以可以一开始走很多个环,然后在走一条1到n的路径. 那么可以求出所有的环,加入到线性基 ...

  5. Kubernetes学习之路(十六)之存储卷

    目录 一.存储卷的概念和类型 二.emptyDir存储卷演示 三.hostPath存储卷演示 四.nfs共享存储卷演示 五.PVC和PV的概念 六.NFS使用PV和PVC 1.配置nfs存储 2.定义 ...

  6. [算法]用java实现0-1背包和部分背包问题

    问题描述: 0-1背包问题,部分背包问题(课本P229)实验要求: (1)实现0-1背包的动态规划算法求解 (2)实现部分背包的贪心算法求解 0-1背包问题代码: public static void ...

  7. 11.7 NOIP总复习总结

    好像要1A模板题.完败 下面主要是一波SB错误总结 最小生成树(忘了sort(QwQ)) // It is made by XZZ // Fei Fan Ya Xi Lie~~~ #include&l ...

  8. 用 Python 带你看《我不是药神》

    我们都是小人物,我们都得了同一种病,我们都穷.——<我不是药神> 我不是程序员 我就是想求求你们,别动不动就拿篇10W+的文章来吓唬人好吗?说点有用的东西好吗?我们需要精神粮食不需要腐蚀精 ...

  9. jquery选择器:获取父级元素、同级元素、子元素

    jQuery的出现给广大开发者提供了不少的方便.从要自己一个一个敲代码,到直接调用方法,无疑大大地提高了网站开发的效率.而在jQuery中有一些方法非常的实用.下面就给大家介绍下jquery选择器:获 ...

  10. ORM框架学习之EF

    首先推荐一篇很好的EF文章翻译,可以系统的学习一遍. <Entity Framework 6 Recipes>中文翻译系列 EF使用体会 优点: 可以省去Ado.net复杂的管道连接代码. ...