HBase高阶(一)基础架构及存储原理

news2025/1/20 5:49:49

一、HBase介绍

简介

HBase是Hadoop生态系统中的一个分布式、面向列的开源数据库,具有高可伸缩性、高性能和强大的数据处理能力。广泛应用于处理大规模数据集。

HBase是一种稀疏的分布式持久的多维排序map

稀疏:对比关系型数据库和非关系型数据库,关系型数据库是以表格的形式进行存储,对存储的要求较高,每一行每一列都需要预留对应的存储空间,这就会造成存储空间的浪费。

分布式:海量数据保存在多台机器上。

持久化:将内存中的对象存储在数据库中,或者存储在磁盘文件中。

多维:noSQL数据库的本质是KV结构。像hashMap就是一种单维的kv结构,存储的数据不够全面、较为单一。 

排序:无序的数据当想要查找的时候,需要遍历全表。而排序的表可以按照一些算法进行查找

map:由行键、列键和时间戳作为keyvalue是一个未解释的字节数组(未解释:经过序列化 或 没有经过UTF-8编码。这么做能够节省存储空间)

hbase的设计模型可以参考这篇文档:

Amandeep Khurana - 基本模型导论

1. 特点

我们都知道HBase是一种 分布式的NoSQL 数据库。比起传统的 RDBMS,由于缺少RDBMS中的许多特性,HBase 更像是一种【数据存储-Data Store】而非【数据库-Data Base】。但是当集群中数据增加到一定程度时,传统RDBMS很难支撑起大量的存储需求,而HBase可以通过分裂rowkey,将数据分布式的存储在不同的RegionServer上。

  1. 数据模式:HBase是一种模式灵活的数据库系统,没有严格定义的表结构。
  2. 强一致性的读/写:HBase在默认情况下提供最终一致性,即写入操作的结果可能不会立即对所有读取操作可见。
  3. 存储与计算:HBase存储在HDFS,使用MapReduce进行计算
  4. 支持使用Java API进行编程访问
  5. 支持Block Cache和Bloom Filters进行大容量查询优化

2. 使用场景

  1. 当数据量够大,比如数亿行数据
  2. 没有使用到RDBMS的特性,如索引、事务、高级查询语言等
  3. 由于需要使用集群,所以需要保证有足够的硬件资源

二、HBase逻辑结构(概念)

1. 基础模型

一个Hbase表的逻辑结构是这样的:

名词解释:

  • Column Family(列族):HBase中的每个列都归属于某个列族,列族不能改变,一行可有多个列族,一个列族可有任意个列;
  • Column(列):类似于关系型数据库中的列名。一般都是从属于某个列族,跟列族不一样,这些列都可以动态添加;
  • RowKey(行键):行键是HBase记录条目的主键,物理存储时会按照RowKey的字典序排序存储,HBase基于RowKey实现索引。

存储特点:

  • Key-Value(键值对):每一列存储的是一个键值对,Key是列名,Value是列值。通过{行键,列族名,列名}可以唯一确定一个列单元并获取数据Value,和关系型数据库不同的是,HBase中的数据是没有类型的,都是以bytes形式存储;
  •  Byte(数据类型):数据在HBase中以Byte存储,实际的数据类型交由用户转换;
  • 多维:通过行、列能维持一个复杂的结构;
  • 数据存储整体有序:按照rowkey的字典序排列,rowkey为byte数组;
  •  稀疏矩阵:行与行之间的列数可以不同,但只有实际的列才会占用存储空间;
  • Version(多版本):每一列都可配置相应的版本数量,获取指定版本的数据(默认返回最新版本)。HBase 的版本维度按递减顺序存储,因此在从存储文件中读取时,最新的值首先被找到。

【引申】

        由于HBase通过Put和Result支持“Bytes-in/Bytes-out”接口,因此任何可以转换为字节数组的内容都可以作为值存储。输入可以是字符串、数字、复杂对象,甚至是图像,只要它们可以转换为字节。

        类似于一个文件夹,里面可以存放各种类型的文件,比如文本文件、图片文件、视频文件等。你可以将这个文件夹看作是HBase表中的一行数据,而文件夹中的文件就是该行数据的值。无论是什么类型的文件,只要它们可以转换为字节,就可以存储在HBase中。

2. 模型拆分

一个表示数十亿行、数百万列,如果不进行拆分无法对其进行存储。

  • 首先横向以行为单位进行拆分。因为在数据表格使用时往往以行为单位,在写入时往往一次写入一行的数据。拆分完就把表格拆分出一个结构:Region。Region在拆分完之后会有对应的rowkey范围,每个Region的rowkey范围不一样,互相不交叉。用于实现分布式结构,拆分完之后可以放到不同的节点上。
  • 然后以列族为单位竖向切分。由于存在数百万列,不进行拆分数据量太大。切分出来的单位成为store。竖向切分为store,用于底层存储到不同的文件夹中,便于文件存储。
  • 切分region:放到不同的节点;切分store:拆分文件夹

3. 多维映射的HBase表中的一行

Key  由 [row key, column family, column qualifier, timestamp] 组成
Value  为每一个 cell 的内容

三、HBase 物理存储结构

虽然在概念级别上可以将表视为一组稀疏的行,但它们在物理上是按列族存储的,可以随时向现有列族添加新的列限定符(column_family:column_qualifier)。

在上面图示中,拆分到最后一个存储单元是一个store。以一个store为例,value是实际存储的数值,也就是“张三”。

Key由行号①rowkey、②列号(包括列族、列限定符)、③时间戳(用于标记版本)、④type(当前标记,如put、delete)组成。

解释:

  • 修改:由于HBase是以HDFS为存储基础的数据库,而HDFS在对文件存储时只能新增、删除、不能修改,所以HBase不能修改数据。为了实现修改数据的功能,HBase通过时间戳来实现版本的标记。读取数据的时候有两个时间版本,新的版本会覆盖旧的版本,就会被认为数据已经修改。
  • 删除:与修改类似,为了实现对数据的删除,HBase通过对时间戳标记,实现对数据的删除。

1. 数据模型

  • NameSpace(命名空间):与database概念类似。每个命名空间下有多个表;
  • Table(表):类似于关系型数据库中表的概念。但Hbase定义表时只需要声明列族,不需要声明具体的列;
  • Row:每行数据由一个Rowkey和多个Column(列)组成;
  • Column:每个列由Column Family(列族)Column Qualifier(列限定符)进行限定。建表时只需要声明列族,列限定符无需预先定义;
  • Time Stamp:用于标识数据的不同版本(version),数据写入时会自动加上该字段,其值为写入HBase的时间;
  • Cell:由 {rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。底层存储的一行数据为一个cell。(一个版本对应一个cel)

四、HBase架构及设计

1. 主架构

  • client:当一个Client需要访问HBase集群时,Client需要先和Zookeeper来通信,获取路由表hbase-meta的存放地址。通过这个存放地址可以获得hbase:meta文件来找到的Client所需要的Region和对应的Region Server的地址,进行DML操作。

  • zookeeper:HMaster通过zookeeper实现分布式的管理。

  • HMaster / Backup-Master:HMaster 是 HBase 集群的主节点,负责管理整个集群的元数据(如表和列族信息)、调度和协调工作,以及处理管理操作。HMaster 负责分配和管理 RegionServer,负责 Region 的负载均衡、故障恢复和自动切分。在 HBase 中,每个集群通常只有一个 HMaster节点,在故障发生时可以通过自动故障转移来切换到另一台 HMaster。

  • HRegionServe:HRegionServer 是 HBase 集群中的工作节点,负责存储和处理数据。RegionServer将进程信息注册到zookeeper中,master读取zk中注册的信息,从而实现管理。每个 RegionServer 管理多个 HBase 表的 Region,每个 Region 负责存储表的一部分数据。HRegionServer 处理来自客户端的读写请求,并将数据存储到 HDFS 上。它还负责处理 Region的 分裂、合并、迁移等操作,以及处理数据的压缩、缓存和预取。

  • HDFS:用于实际存储数据。

2. 其他组成部分

  • HLog:负责记录着数据的操作日志,当HBase出现故障时可以进行日志重放、故障恢复。例如,磁盘掉电导致 MemStore中的数据没有持久化存储到 StoreFile,这时就可以通过HLog日志重放来恢复数据。
  • HRegion:将表切分成多个region。
  • Store:一个 Region 由多个 Store 组成,每个 Store 都对应一个 Column Family, Store 包含 MemStore 和 StoreFile。
  1. MemStore内存数据存储,数据的写操作会先写到 MemStore 中,当MemStore 中的数据增长到一个阈值(默认64M)后,Region Server 会启动 flasheatch 进程将 MemStore 中的数据写人 StoreFile 持久化存储,每次写入后都形成一个单独的 StoreFile。
  2. StoreFile:MemStore 内存中的数据写到文件后就是StoreFile,StoreFile底层是以 HFile 的格式保存。HBase以Store的大小来判断是否需要切分Region。
  • HFile / StoreFile:HFile 和 StoreFile 是同一个文件,只不过站在 HDFS 的角度称这个文件为HFile,站在HBase的角度就称这个文件为StoreFile。

HBase将表格的数据存储到HDFS上,按照 namespace -> table -> region -> store 的格式划分文件夹存储。在store内部存储HFile,内部为对应的cell。

3. HBase 表的设计原则

  •  region 的大小设置在 10-50GB 之间;
  • 单个 cell 大小不超过 10MB。或使用mob机制存储数据时,单个mob列不大于50MB。否则,可以考虑将数据存储在HDFS中,并在HBase中存储一个指向数据在HDFS中位置的指针;
  • 一个典型的模式每个表有1到3个列族。HBase表不应该被设计成模仿RDBMS表;
  • 对于1-2个列族的表来说,region最好设置为50-100个;
  • 列族尽可能短,不能像RDBMS那样具有描述性;

【注】mob是指"Mobile”(移动)的简称。它是一种特殊的存储机制,用于存储较大的数据值(例如大文本、图像、音频等),可以提供更高的读取性能和压缩比

4. HBase 列族的设计原则

  • HBase目前不能很好地处理超过两个或三个列族的任何东西,所以最好尽量减少列族的数量
  • 如果单个表中存在多个列族,请注意表格的行数。如果 列族A 有100万行,而 列族B 有10亿行,那么 列族A 的数据可能会分布在很多很多的 regionserver 中。会大大降低对 列族A 进行大规模扫描的效率。

5. HBase RowKey的设计原则

参考 -> HBase rowkey的设计原则

四、HBase原理

写入过程

当数据写入HBase时,首先会根据表的设计将数据写入对应的Region。每个Region维护一个HLogMemStore。数据首先被追加到HLog中,以提供数据的持久性和故障恢复。然后数据被写入内存的MemStore中,当MemStore积累到一定的大小后,将其刷新到磁盘上的HFile中。同时,HBase还会对数据进行压缩和写缓存等优化操作。

可以参考->HBase有写入数据,页面端显示无数据量_five小点心的博客-CSDN博客

读取过程

读取数据时,HBase首先在内存中的MemStore中查找数据,然后在HFile中进行查找。由于HFile支持块级索引,可以高效地定位到指定行的数据。HBase还可以利用块缓存(BlockCache)来加速数据的读取操作,通过将热点数据缓存在内存中,提高读取性能。

故障恢复

HBase通过复制机制实现数据的冗余备份,并通过多个RegionServer之间的数据复制来提供高可用性和容错性。当一个RegionServer宕机时,HBase会使用备份的数据进行自动故障转移,将失效的Region切换到其他可用的RegionServer上。

自动切分

HBase支持自动切分(Split)功能,当一个Region存储的数据过大时,HBase会自动将其切分为两个或多个Region,从而实现数据的均衡分布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1051598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(LDxLDxR)?

将内存中的数据搬到 NEON 寄存器,有很多指令可以完成,熟悉这些指令是必须的。 1 LD1 (multiple structures) 将多个单元素结构加载到一个,两个,三个或四个寄存器上。该指令从内存中加载多个单元结构,并将结果写入一、二、三或四个 SIMD&FP 寄存器。 无偏移 一个寄存…

json能够存储图片吗?

JSON 本身并不适合存储图片,因为它是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON 数据格式简单,只包含键值对,因此它主要用于存储和传输文本数据。 然而,你可以将图片转换为 …

王庆友-架构的本质:如何打造一个有序的系统?

整理自:王庆友-[架构实战案例解析] 我们知道,现在的软件系统越来越复杂,当然相应地,架构的作用也越来越明显。作为开发人员,我们每天都在和架构打交道,在这个过程中,对于架构也经常会产生各种各…

【已解决】关于如何将Doccano标注的文本转换成NER模型可以直接处理的CoNLL 2003格式

笔者要做命名实体识别(NER)的工作,选择了Doccano平台来进行文本标注。 Doccano平台对标注结果的导出格式是JSONL格式,我们导出了NER.jsonl文件。 但是用python语言搭建深度学习模型来实现NER时,一般接收的输入数据格式…

AI在材料科学中的应用

7 AI在材料科学中的应用 在这一部分,我们将讨论AI技术在材料科学中的应用。首先,我们将介绍晶体材料的概述,并详细定义晶体材料的物理对称性,具体在第7.1节中讨论。接下来,我们将在第7.2节和第7.3节中讨论两个常见且基…

学信息系统项目管理师第4版系列13_立项管理

1. 项目立项管理包括 1.1. 项目建议与立项申请 1.2. 项目可行性研究 1.2.1. 初步可行性研究 1.2.2. 详细可行性研究 1.2.2.1. 不可缺少 1.2.2.1.1. 【高21上选21】 1.2.3. 可以依据项目的规模和繁简程度合二为一 1.3. 项目评估与决策 2. 立项申请 2.1. 项目建议书 2…

LeetCode 322.零钱兑换 完全背包 + 动态规划

322. 零钱兑换 - 力扣(LeetCode) 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff…

PgSQL-内核特性-TupleTableSlotOps

PgSQL-内核特性-TupleTableSlotOps 执行器中表达式结果、函数结果、投影结果等,各种结果都需要以元组的形式返回,所以PgSQL引入了一种通用格式保存数据:TupleTableSlot。PgSQL执行器将记录存储到“元组表”中在各个算子之间进行传递&#xff…

Spring修炼之路(2)依赖注入(DI)

一、概念 依赖注入(Dependency Injection,DI)。 测试pojo类 : Address.java 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 . 二、 注入方式 2.1构造器注入 我们在之前的案例已经…

8章:scrapy框架

文章目录 scrapy框架如何学习框架?什么是scarpy?scrapy的使用步骤1.先转到想创建工程的目录下:cd ...2.创建一个工程3.创建之后要转到工程目录下4.在spiders子目录中创建一个爬虫文件5.执行工程setting文件中的参数 scrapy数据解析scrapy持久…

开源Windows12网页版HTML源码

开源Windows12网页版HTML源码,无需安装就能用的Win12网页版来了Windows12概念版(PoweredbyPowerPoint)后深受启发,于是通过使用HTML、CSS、js等技术做了这样一个模拟板的Windows12系统,并已发布至github进行开源。 这…

蓝牙设备在智能家居控制系统中的应用

随着科技的发展和普及,智能家居已经成为一种新兴的生活方式。所谓智能家居,可以远程控制灯何时打开和关闭、植物何时浇水、加湿器和空调何时打开,甚至人睡觉时听什么。现在越来越多的人开始享受到智能家居带来的便利和舒适。其中,…

FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)

文章目录 前言一、空闲任务概念二、钩子函数概念三、任务调度算法四、任务调度算法实验1.实验代码2.是否抢占3.时间片是否轮转4.空闲任务让步 总结 前言 本篇文章将带大家学习一下什么是空闲任务以及钩子函数,以及学习FreeRTOS中的任务调度算法,了解在F…

常见的7种分布式事务解决方案(2pc,3pc,Tcc,Seta、本地事务....)

一 分布式事务 1.1 分布式事务 在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协同完成的事务称为分布式事务。 1.首先满足事务特性:ACID 2.而在分布式环境下,会涉及到多个数据库 总结:分布式事务…

Makefile快速上手

Makefile学习 https://maxwell-lx.vip/basic-usage-make/ https://zhuanlan.zhihu.com/p/92010728 https://zhuanlan.zhihu.com/p/350297509 一、是什么 可以理解为一个自动化的编译脚本,避免繁琐的手动编译过程。有点类似shell脚本。 1.1 从小例子入手 &…

B058-SpringBoot

目录 springboot概念与作用入门案例springboot运行方式热部署配置文件Profile多环境支持整合测试-springboot-testSpringboot-web1.返回json数据2.返回页面(模板技术)thymeleaf1.导入thymeleaf依赖2.模板文件3.controller4.启动类 SSM整合1.导包2.项目目…

【Excel】快速提取某个符号前面的数据内容

【问题描述】 在使用excel整理数据过程中,经常与需要调整数据后,进行使用。 例如凭证导出后,科目列是包含科目编码和科目名称的。 但由于要将数据复制到其他的导入模板上使用,对应的模板只需要科目编码,不需要科目名称…

【管理运筹学】第 5 章 | 整数规划(4,指派问题)

系列文章 【管理运筹学】第 5 章 | 整数规划 (1,问题提出与分支定界法) 【管理运筹学】第 5 章 | 整数规划 (2,割平面法及 0-1 变量的特性) 【管理运筹学】第 5 章 | 整数规划 (3,隐…

Win10怎样取消自动固定到快速访问?

双击桌面上此电脑在菜单栏点击查看在弹出的选项里边选择选项在打开文件资源管理器那里把快速访问改成此电脑在下面隐私部分选择快速访问中显示最近使用文件在快速访问中显示常用文件夹并且清除文件资源管理器记录就行。

调度器/调度程序

一、调度对象 1.让谁运行-调度算法 闲逛进程:无其他就绪进程时,运行闲逛进程;优先级最低,能耗低。 2.运行多长时间-时间片大小 二、调度产生时机 1.创建新进程与进程退出 2.运行进程阻塞 3.I/O中断发生,可能唤醒…