Hbas简介:数据模型和概念、物理视图
文章目录
- 说明
- 零 BigTable
- 一 Hbase简介
- 二 HBase 访问接口简介
- 三 行式&列式存储
- 四 HBase 数据模型
- 4.1 HBase 列族数据模型
- 4.2 数据模型的相关概念
- 4.3 数据坐标
- 五 概念&物理视图
说明
- 本文参考自林子雨老师的大数据技术原理与应用(第三版)教材内容,仅供学习和交流
零 BigTable
-
Google Bigtable是一种高度可扩展的分布式数据库,旨在处理海量数据并提供高吞吐量和低延迟的访问。它是谷歌公司为其内部使用而开发的,并在2004年首次公开发表。
-
它利用谷歌提出的 MapReduce 分布式并行计算模型来处理海量数据,使用谷歌分布式文件系统 GFS 作为其底层数据存储方式,通过自动分片和负载均衡来实现数据在集群中的分布和访问,并采用 Chubby 提供协同管理服务,可以扩展到 PB 级别的数据和上千台机器,具备 广泛应用性、可扩展性、高性能和高可用性 等特点。
-
Bigtable还提供了强大的数据一致性和持久性保证。数据在写入时会被复制到多个地理位置的存储节点,以确保数据的可靠性和冗余备份。此外,Bigtable还支持强一致性和事务操作,使得应用程序可以进行复杂的数据操作和查询。
-
Google Bigtable是一种高度可扩展、具有高性能和可靠性的分布式数据库,适用于处理大规模数据集和高并发访问的场景。 BigTable 具备以下特性:支持大规模海量数据,分布式并发数据处理效率极高,易于扩展且支持动态伸缩,适用于廉价设备,适合读操作不适合写操作。
一 Hbase简介
-
HBase 是谷歌 BigTable 的开源实现,是一个高可靠、高性能、面向列、可伸缩的分布式非关系型数据库,主要用来存储非结构化和半结构化的松散数据,并提供高吞吐量和低延迟的数据访问能力。
-
HBase的架构是基于Hadoop生态系统的,它使用HDFS作为底层存储系统;并利用 Hadoop MapReduce来处理 HBase 中的海量数据,实现高性能计算;利用 ZooKeeper 作为协同服务,实现稳定服务和失败恢复。
-
Sqoop 为 HBase 提供了高效、便捷的关系数据库管理系统(Relational DataBase Management System,RDBMS)数据导人功能,Pig 和 Hive为 HBase 提供了高层语言支持。

-
HBase 和 BigTable 的底层技术对应关系
| 项目 | BigTable | HBase |
|---|---|---|
| 文件存储系统 | GFS | HDFS |
| 海量数据处理 | MapReduce | Hadoop |
| 协同服务管理 | Chubby | ZooKeeper |
二 HBase 访问接口简介
- HBase 提供了 Native Java API、HBase Shell、Thrift Gateway、REST Gateway、Pig、Hive 等多种访问方式
| 类型 | 特点 | 使用场合 |
|---|---|---|
| Native Java API | 常规和高效的访问方式 | 适合 Hadoop MapReduce 作业并行批处理 HBase 表数据 |
| HBase Shell | HBase 的命令行工具,最简单的接口 | 适合 HBase 管理 |
| Thrift Gateway | 利用 Thrift 序列化技术,支持 C++、PHP、Python 等多种语言 | 适合其他异构系统在线访问 HBase 表数据 |
| REST Gateway | 解除语言限制 | 支持 REST 风格的 HTTP API 访问 HBase |
| Pig | 使用 Pig Latin 流式编程语言来处理HBase 中的数据 | 适合数据统计 |
| Hive | 简单 | 以类似 SQL 的方式来访问 HBase |
三 行式&列式存储
- 传统的关系数据库采用的是面向行的存储,被称为“行式数据库”。而HBase 是面向列的存储,也就是说,HBase 是一个“列式数据库”。

- 行式数据库使用行存储模型(N-ary Storage Model,NSM),一个元组(或行)会被连续地存储在磁盘页中。数据是一行一行被存储的,第一行写入后,再继续写入第二行,以此类推。在读取数据时,需要顺序扫描每个元组的完整内容,然后从每个元组中筛选出查询所需要的属性。如果每个元组只有少量属性的值对于查询是有用的,那么 NSM 就会浪费许多磁盘空间和内存带宽。
- 列式数据库采用列存储模型(Decomposition Storage Model,DSM),目的是最小化无用的 I/O。DSM 采用不同于 NSM 的思路,对于采用 DSM 的关系数据库,DSM会对关系进行垂直分解,并为每个属性分配一个子关系。因此,一个具有 n 个属性的关系会被分解成 n 个子关系,每个子关系单独存储,每个子关系只有当其相应的属性被请求时才会被访问。
- DSM 以关系数据库中的属性或列为单位进行存储,关系中多个元组的同一属性值(或同一列值)会被存储在一起,而一个元组中不同属性值通常会被分别存放于不同的磁盘页中。

- 行式数据库主要适合小批量的数据处理,如联机事务型数据处理, Oracle 和MySQL 等关系数据库都属于行式数据库。
- 列式数据库主要适合批量数据处理和即席查询(Ad-Hoc Query),用于数据挖掘、决策支持和地理信息系统等查询密集型系统中。
- DSM优点:降低 I/O 开销;支持大量并发用户查询;数据处理速度快;具有较高的数据压缩比
- DSM 的缺陷是:执行连接操作时需要昂贵的元组重构代价。因为一个元组的不同属性被分散到不同磁盘页中存储,当需要一个完整的元组时,就要从多个磁盘页中读取相应字段的值来重新组合得到原来的一个元组。
- 如果严格从关系数据库的角度来看,HBase 并不是一个列式存储的数据库,毕竟HBase 是以列族为单位进行分解的(列族当中可以包含多个列),而不是每个列都单独存储,但是HBase 借鉴和利用了磁盘上的这种列存储格式,所以,从这个角度来说,HBase 可以被视为列式数据库。
四 HBase 数据模型
4.1 HBase 列族数据模型
- HBase 是一个稀疏、多维度、排序的映射表,索引包括行键、列族、列限定符和时间戳。每个值是一个未经解释的字符串,没有数据类型。
- 在表中存储数据,每一行都有一个可排序的行键和任意多的列。表在水平方向由一个或者多个列族组成,一个列族中可以包含任意多个列,同一个列族里面的数据存储在一起。列族支持动态扩展,可以很轻松地添加一个列族或列,无须预先定义列的数量以及类型,所有列均以字符串形式存储,用户需要自行进行数据类型转换。由于同一张表里面的每一行数据都可以有截然不同的列,因此对于整个映射表的每行数据而言,有些列的值是空的,所以说 HBase 是稀疏的。
- HBase执行更新操作时,保留旧版本的数据,同时生成一个新版本的数据。HBase 可以对允许保留的版本的数量进行设置。客户端可以选择获取距离某个时间最近的版本,或者一次获取所有版本。在存储的时候,数据会按照时间戳排序,如果在查询的时候不提供时间戳,会返回最新版本的数据。
- HBase 提供了两种数据版本回收方式:一是保存数据的最后 n 个版本;二是保存最近一段时间内的版本(如最近 7 天)。
4.2 数据模型的相关概念
- HBase 实际上就是一个稀疏、多维、持久化存储的映射表,它采用行键(Row Key)、列族(Column Family)、列限定符(Column Qualifier)和时间戳(Timestamp)进行索引,每个值都是未经解释的字节数组 byte[]

- 表:HBase 采用表来组织数据,表由行和列组成,列划分为若干个列族
- 行键:每个 HBase 表都由若干行组成,每个行由行键(Row Key)来标识。
- 访问表中的行只有 3 种方式:通过单个行键访问;通过一个行键的区间来访问;全表扫描。
- 行键可以是任意字符串(最大长度是 64 KB)。在 HBase 内部,行键保存为字节数组。
- 存储时,数据按照行键的字典序存储(将经常一起读取的行存储在一起)
- 列族:一个 HBase 表被分组成许多“列族”的集合,它是基本的访问控制单元
- 列族需要在表创建时就定义好,数量不能太多,而且不能频繁修改
- 存储在一个列族当中的所有数据,通常都属于同一种数据类型(数据具有较高的压缩率)
- 表中的每个列都归属于某个列族,数据可以被存放到列族的某个列下面,但是在把数据存放到这个列族的某个列下面之前,必须首先创建这个列族。在创建完列族以后,就可以使用同一个列族当中的列。列名都以列族作为前缀。例如,courses:history 和 courses:math 这两个列都属于 courses 这个列族
- 列限定符:列族里的数据通过列限定符(或列)来定位。列限定符不用事先定义,也不需要在不同行之间保持一致。列限定符没有数据类型,总被视为字节数组 byte[]
- 单元格 :在 HBase 表中,通过行键、列族和列限定符确定一个“单元格”(Cell)。单元格中存储的数据没有数据类型,总被视为字节数组 byte[]。每个单元格中可以保存一个数据的多个版本,每个版本对应一个不同的时间戳
- 时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引。
- 每次对一个单元格执行操作(新建、修改、删除)时,HBase 都会隐式地自动生成并存储一个时间戳。一个单元格的不同版本根据时间戳降序存储,确保最新的版本可以被最先读取。
4.3 数据坐标
- HBase 使用坐标来定位表中的数据。HBase 中需要根据行键、列族、列限定符和时间戳来确定一个单元格,因此可以视为一个“四维坐标”,即
["行键", "列族", "列限定符", "时间戳"]


五 概念&物理视图
- 在一个 HBase 表的概念视图中,每个行都包含相同的列族,尽管行不需要在每个列族里存储数据.从这个角度来说,HBase表是一个稀疏的映射关系,即里面存在很多空的单元格
- HBase 存储数据的概念视图

- 物理视图:在物理存储层面,它采用基于列的存储方式,而不是像传统关系数据库那样采用基于行的存储方式。
- 表 4-4 的概念视图在物理存储的时候,会存成表 4-5 中的两个小片段。HBase 表会按照 contents 和 anchor 这两个列族分别存放,属于同一个列族的数据保存在一起,同时和每个列族一起存放的还包括行键和时间戳。

相关文章:
Hbas简介:数据模型和概念、物理视图
文章目录 说明零 BigTable一 Hbase简介二 HBase 访问接口简介三 行式&列式存储四 HBase 数据模型4.1 HBase 列族数据模型4.2 数据模型的相关概念4.3 数据坐标 五 概念&物理视图 说明 本文参考自林子雨老师的大数据技术原理与应用(第三版)教材内容,仅供学习…...
uniapp css样式穿透
目录 前言css样式穿透方法不加css样式穿透的代码加css样式穿透的代码不加css样式穿透的代码 与 加css样式穿透的代码 的差别参考 前言 略 css样式穿透方法 使用 /deep/ 进行css样式穿透 不加css样式穿透的代码 <style>div {background-color: #ddd;} </style>…...
【立创EDA-PCB设计基础完结】7.DRC设计规则检查+优化与丝印调整+打样与PCB生产进度跟踪
前言:本文为PCB设计基础的最后一讲,在本专栏中【立创EDA-PCB设计基础】前面已经将所有网络布线铺铜好了,接下来进行DRC设计规则检查优化与丝印调整打样与PCB生产进度跟踪 目录 1.DRC设计规则检查 2.优化与丝印调整 1.过孔连接优化 2.泪滴…...
android 线程池的管理工具类
封装了各种类型的线程池,方便直接使用 看下有哪些类型: 默认线程池,搜索模块专用线程池,网络请求专用线程池,U盘更新,同步SDK读写操作线程池,日志打印使用线程池 DEFALUT,SEARCH&…...
编码风格之(5)GNU软件编码风格(3)
GNU软件编码标准风格(3) Author:Onceday Date: 2024年1月21日 漫漫长路,才刚刚开始… 本文主要翻译自《GNU编码标准》(GNU Coding Standards)一文。 参考文档: Linux kernel coding style — The Linux Kernel documentationGNU Coding Standard…...
8 种网络协议
什么是网络协议? 网络协议就是计算机之间沟通的语言,为了有效地交流,计算机之间需要一种共同的规则或协议,就像我们和老外沟通之前,要先商量好用哪种语言,要么大家都说中文,要么大家都说英语&a…...
Flash读取数据库中的数据
Flash读取数据库中的数据 要读取数据库的记录,首先需要建立一个数据库,并输入一些数据。数据库建立完毕后,由Flash向ASP提交请求,ASP根据请求对数据库进行操作后将结果返回给Flash,Flash以某种方式把结果显示出来。 …...
如何写出规范优雅的代码
编码规范是成为一个优质程序员的重要一课,它是编程的样式的模板。这篇文章将介绍12中编程规范及技巧,相信学习之后你的代码一定会提升一个档次。 首先我们要明确,为什么要遵循编码规范?遵循这样的约定有什么好处? 遵循…...
【数据结构】链表(单链表与双链表实现+原理+源码)
博主介绍:✌全网粉丝喜爱、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦! 🍅附上相关C语言版源码讲解🍅 ὄ…...
14027.ptp 控制流
文章目录 1 ptp 控制流1.1 控制流分层 1 ptp 控制流 1.1 控制流分层 大体分为4层:1 ptp4l层: 获取配置文件、创建时钟、poll监控文件描述符。2 clock时钟层:提供提供clock_poll、clock_create、clock_sync 等3 port 端口层:port…...
【昕宝爸爸小模块】深入浅出之为什么POI的SXSSFWorkbook占用内存更小
➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…...
CentOS安装Flume
CentOS安装Flume 一、简介二、安装1、下载2、解压3、创建配置文件4、启动flume agent5、验证 一、简介 Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexi…...
Qt 多次绘图
使用Qt 的时候发现: 背景:自己定义一个类,把它和某个ui文件绑定。(类似 Qt creator 默认创建的工程)问题:当鼠标在窗口内单击的时候会触发2次绘图。?难道不应该是一次吗? 于是开始了如下的测试…...
设计模式介绍
概念: 设计模式是一套被反复使用的、多数人知晓、经过分类编目的优秀代码设计经验的总结。特定环境下特定问题的处理方法。 1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用 2)提高扩展性 大量使用面向接口编程&…...
linux 之 ln 命令
linux 之 ln 命令 在Linux中,ln 命令用于创建文件或目录的链接。它有两种主要类型的链接。 硬链接(Hard Links) 硬链接实际上是原始文件的另一个引用,指向同一个inode(索引节点),这意味着它们共…...
【设计模式】张一鸣笔记:责任链接模式怎么用?
我将通过一个贴近现实的故事——请假审批流程,带你了解和掌握责任链模式。 什么是责任链模式? 责任链模式是一种行为设计模式,它让你可以避免将请求的发送者与接收者耦合在一起,让多个对象都有处理请求的机会将这个对象连成一条…...
Vulnhub-dc4
靶场下载 https://download.vulnhub.com/dc/DC-4.zip 信息收集 判断目标靶机的存活地址: # nmap -sT --min-rate 10000 -p- 192.168.1.91 -oN port.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-21 16:36 CST Stats: 0:00:03 elapsed; 0 hosts completed (1 up…...
MySQL45道练习题
作业需要数据表SQL语句已给 1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 select * from Student RIGHT JOIN (select t1.SId, class1, class2 from(select SId, score as class1 from sc where sc.CId 01)as t1, (select SId, score as …...
HTML5和CSS3的新特性
HTML5的新特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等 1,HTML5新增的语义化标签 <header> 头部标签 <nav> 导航标签 <article> …...
【MySQL】表列数和行大小限制详解
目录 限制维度 列数量限制 表的最大行大小 单个列的存储要求 存储引擎的附加限制 功能键部分 行容量限制 MySQL表的内部实现 InnoDB表的最大行大小 超出InnoDB最大行大小的处理 不同存储格式的影响 限制示例 行大小限制示例 InnoDB下 MyISAM下 InnoDB变长情况示…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
