大数据技术(七)—— HBase数据结构与架构

目录

一、Hbase概述

1、Hadoop的局限性

2、什么是Hbase

3、HDFS和Hbase

4、HBase的存储机制

[5、HBase 和 RDBMS](#5、HBase 和 RDBMS)

二、数据结构

[1、Row Key (行键)](#1、Row Key (行键))

[2、Column Family(列族)](#2、Column Family(列族))

[3、Column Qualifier (列限定符)](#3、Column Qualifier (列限定符))

4、Column(列)

5、Cell

6、Timestamp(时间戳)

三、存储结构

[1、 Regions](#1、 Regions)

[2、 Region Server](#2、 Region Server)

四、Hbase架构

1、MasterServer的作用

2、RegionServer

3、Zookeeper

4、HDFS

5、组件间的协作

五、参考


一、Hbase概述

1、Hadoop的局限性

Hadoop 使用分布式文件系统来存储大数据,并使用 MapReduce 来处理大数据。Hadoop 擅长存储和处理各种格式(例如任意、半结构化甚至非结构化)的海量数据。但是Hadoop 只能执行批处理,并且只能按顺序访问数据。这意味着,即使是最简单的作业,也必须搜索整个数据集。这时就期待能出现一种随机读写的需求,HBase、Cassandra、couchDB、Dynamo 和 MongoDB 等应用程序是一些存储大量数据并以随机方式访问数据的数据库。而Hbase就是其中之一。

2、什么是Hbase

HBase 是一个建立在 Hadoop 文件系统之上的分布式列式数据库,具有水平可扩展性。它是 Hadoop 生态系统的一部分,提供对 Hadoop 文件系统中数据的随机实时读/写访问。

3、HDFS和Hbase

|-------------------------|----------------------------------------------------|
| HDFS | HBase |
| HDFS是一个适合存储大文件的分布式文件系统。 | HBase是一个建立在HDFS之上的数据库。 |
| HDFS 不支持快速单个记录查找。 | HBase 为更大的表提供快速查找。 |
| 它提供高延迟批处理;没有批处理的概念。 | 它提供对数十亿条记录中的单行的低延迟访问(随机访问)。 |
| 它仅提供数据的顺序访问。 | HBase 内部使用哈希表并提供随机访问,并将数据存储在索引的 HDFS 文件中以便更快地进行查找。 |

4、HBase的存储机制

HBase 是一个列式数据库,其中的表按行排序。表模式仅定义列族(personal data 和professional data即为列族),即键值对。一个表有多个列族,每个列族可以有任意数量的列。后续列值连续存储在磁盘上。表的每个单元格值都有一个时间戳。

5、HBase 和 RDBMS

|--------------------------------|----------------------------|
| HBase | 关系型数据库 |
| HBase 是无模式的,它没有固定列模式的概念;只定义列族。 | RDBMS 由其模式控制,该模式描述了表的整个结构。 |
| 它专为宽表而构建。HBase 线性扩展。 | 表较小,不易扩容。 |
| HBase 中没有事务。 | RDBMS 是事务性的。 |
| 它具有非规范化的数据。 | 它将具有规范化的数据。 |
| 它适用于半结构化和结构化数据。 | 它对结构化数据很有用。 |

二、数据结构

1、Row Key (行键)

Row key 是用来检索记录的主键。想要访问 HBase Table 中的数据,只有以下三种方式:

  • 通过指定的 Row key 进行访问;
  • 通过 Row Key 的 range 进行访问,即访问指定范围内的行;
  • 进行全表扫描。

Row key 可以是任意字符串,存储时数据按照 Row key 的字典序进行排序。这里需要注意以下两点:

  • 因为字典序对 Int 排序的结果是 1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,...,9,91,92,93,94,95,96,97,98,99。如果你使用整型的字符串作为行键,那么为了保持整型的自然序,行键必须用 0 作左填充。
  • 行的一次读写操作时原子性的 (不论一次读写多少列)。

2、Column Family(列族)

HBase 表中的每个列,都归属于某个列族。列族是表的 Schema 的一部分,所以列族需要在创建表时进行定义。列族的所有列都以列族名作为前缀,例如 courses:history,courses:math都属于 courses 这个列族。

3、Column Qualifier (列限定符)

列限定符,你可以理解为是具体的列名,例如 courses:history,courses:math都属于 courses这个列族,它们的列限定符分别是 historymath。需要注意的是列限定符不是表 Schema 的一部分,你可以在插入数据的过程中动态创建列。

4、Column(列)

HBase 中的列由列族和列限定符组成,它们由 :(冒号) 进行分隔,即一个完整的列名应该表述为 列族名 :列限定符

5、Cell

Cell是行,列族和列限定符的组合,并包含值和时间戳。你可以等价理解为关系型数据库中由指定行和指定列确定的一个单元格,但不同的是 HBase 中的一个单元格是由多个版本的数据组成的,每个版本的数据用时间戳进行区分。

6、Timestamp(时间戳)

HBase 中通过Row Key 和 column 确定的为一个存储单元称为 Cell。每个 Cell 都保存着同一份数据的多个版本。版本通过时间戳来索引,时间戳的类型是 64 位整型,时间戳可以由 HBase 在数据写入时自动赋值,也可以由客户显式指定。每个 Cell 中,不同版本的数据按照时间戳倒序排列,即最新的数据排在最前面。

三、存储结构

1、 Regions

HBase Table 中的所有行按照 RowKey 的字典序排列。HBase Tables 通过行键的范围 (row key range) 被水平切分成多个 Region, 一个 Region 包含了在 start key 和 end key 之间的所有行。

每个表一开始只有一个 Region,随着数据不断增加,Region会不断增大,当增大到一个阀值的时候,Region就会等分为两个新的 Region。当 Table 中的行不断增多,就会有越来越多的 Region。

Region 是 HBase 中分布式存储和负载均衡的最小单元。这意味着不同的Region可以分布在不同的 RegionServer上。但一个 Region是不会拆分到多个 Server 上的。

2、 Region Server

RegionServer运行在 HDFS 的 DataNode 上。它具有以下组件:

  • WAL(Write Ahead Log,预写日志):用于存储尚未进持久化存储的数据记录,以便在发生故障时进行恢复。
  • BlockCache :读缓存。它将频繁读取的数据存储在内存中,如果存储不足,它将按照 最近最少使用原则 清除多余的数据。
  • MemStore:写缓存。它存储尚未写入磁盘的新数据,并会在数据写入磁盘之前对其进行排序。每个 Region 上的每个列族都有一个 MemStore。
  • HFile :将行数据按照 Key\Values 的形式存储在文件系统上。

Region Server 存取一个子表时,会创建一个 Region 对象,然后对表的每个列族创建一个 Store实例,每个 Store会有 0 个或多个 StoreFile与之对应,每个 StoreFile则对应一个 HFile,HFile 就是实际存储在 HDFS 上的文件。

四、Hbase架构

从图中可以看出Hbase是由Client、Zookeeper、MasterServer、RegionServer、HDFS等几个组件组成。

在 HBase 中,表被划分为Region并由Region Server提供服务。区域按列族(Column Family)垂直划分为"Store"。Store以文件形式(HFile)保存在 HDFS 中。

1、MasterServer的作用

  • 为 Region Server 分配 Region ;
  • 负责 Region Server 的负载均衡 ;
  • 发现失效的 Region Server 并重新分配其上的 Region;
  • GFS 上的垃圾文件回收;
  • 处理 Schema 的更新请求,如创建表和列族。

2、RegionServer

  • 管理master为其分配的Region。
  • 处理来自客户端的读写请求。
  • 负责和底层HDFS的交互,存储数据到HDFS。
  • 负责Region变大以后的切分。
  • 负责Storefile的合并工作。

3、Zookeeper

  • HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。
  • 利用Zk的临时节点,实时监控 Region Server 的状态,将 Region Server 的上线和下线信息实时通知给 Master。
  • Client 通过Zookeeper与RegionServer通信。
  • 保证任何时候,集群中只有一个 Master。
  • 存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family 等信息。

4、HDFS

HDFS为HBase提供元数据和表数据的底层分布式存储服务,并通过数据多副本,保证HBase的高可靠和高可用性。

5、组件间的协作

HBase 使用 ZooKeeper 作为分布式协调服务来维护集群中的服务器状态。 Zookeeper 负责维护可用服务列表,并提供服务故障通知等服务:

  • 每个 Region Server 都会在 ZooKeeper 上创建一个临时节点,Master 通过 Zookeeper 的 Watcher 机制对节点进行监控,从而可以发现新加入的 Region Server 或故障退出的 Region Server;
  • 所有 Masters 会竞争性地在 Zookeeper 上创建同一个临时节点,由于 Zookeeper 只能有一个同名节点,所以必然只有一个 Master 能够创建成功,此时该 Master 就是主 Master,主 Master 会定期向 Zookeeper 发送心跳。备用 Masters 则通过 Watcher 机制对主 HMaster 所在节点进行监听;
  • 如果主 Master 未能定时发送心跳,则其持有的 Zookeeper 会话会过期,相应的临时节点也会被删除,这会触发定义在该节点上的 Watcher 事件,使得备用的 Master Servers 得到通知。所有备用的 Master Servers 在接到通知后,会再次去竞争性地创建临时节点,完成主 Master 的选举。

五、参考

1、https://www.tutorialspoint.com/hbase/hbase_overview.htm

2、https://github.com/heibaiying/BigData-Notes/blob/master/notes

相关推荐
Cedric_Anik37 分钟前
数据结构——链表
数据结构·链表
子非鱼@Itfuture2 小时前
Spark是什么?Flink和Spark区别
java·大数据·数据仓库·python·flink·spark
sjsjs112 小时前
【数据结构-堆】力扣3066. 超过阈值的最少操作数 II
数据结构·算法·leetcode
ゞ 正在缓冲99%…3 小时前
leecode1143.最长公共子序列
数据结构·算法·leetcode
qystca3 小时前
数据结构(1~10)
数据结构·c++·算法
铭毅天下3 小时前
探索 INFINI Console:提升 Elasticsearch 管理效率的新利器
大数据·elasticsearch·搜索引擎·全文检索·jenkins
梦想平凡4 小时前
浅谈棋牌游戏开发流程八:运维与数据分析
大数据·elasticsearch·搜索引擎·cocos2d·源代码管理
JermeryBesian4 小时前
Flink源码解析之:Flink on k8s 客户端提交任务源码分析
大数据·flink·kubernetes
浩浩kids4 小时前
Hadoop•配置网络&克隆虚拟机
大数据·网络·hadoop
PersistJiao5 小时前
实时数仓:数据湖 + Flink当前实时数仓中非常主流且高效的方案之一
大数据·flink·实时数仓