大数据HBase图文简介

news2025/1/16 3:35:53

往期推荐

数据仓库及数仓架构概述-CSDN博客

数仓常见名词解析和名词之间的关系-CSDN博客

引言

要想明白为什么产生 HBase,就需要先了解一下 Hadoop 存在的限制:Hadoop 可以通过 HDFS 来存 储结构化、半结构甚至非结构化的数据,是传统数据库的补充,是海量数据存储的最佳方法,它针对大文件的存储、批量访问和流式访问都做了优化,同时也通过多副本解决了容灾问题。

但是 Hadoop 的缺陷在于它只能执行批处理,并且只能以顺序方式访问数据,这意味着即使是最简单的工作也必须搜索整个数据集,无法实现对数据的随机访问。实现数据的随机访问是传统的关系型数据库所擅长的,但它们却不能用于海量数据的存储。在这种情况下,必须有一种新的方案来解决海量数据 存储和随机访问的问题,HBase 就是其中之一 (HBase,Cassandra,couchDB,Dynamo 和 MongoDB 都能存储海量数据并支持随机访问)。

数据结构分类:

  • 结构化数据:即以关系型数据库表形式管理的数据;
  • 半结构化数据:非关系模型的,有基本固定结构模式的数据,例如日志文件、XML 文档、 JSON 文档、Email 等;
  • 非结构化数据:没有固定模式的数据,如 WORD、PDF、PPT、EXL,各种格式的图片、视 频等。

简介

HBase是构建在Hadoop的HDFS文件系统之上的面向列族的数据库管理系统

HBase有如下特点:

  • 容量大:一个表可以有数十亿行,上百万列,这也和它的扩展性息息相关;
  • 面向列:数据是按照列存储,每一列都单独存放,数据即索引,在查询时可以只访问指定列的数 据,有效地降低了系统的 I/O 负担;
  • 稀疏性:空 (null) 列并不占用存储空间,表可以设计的非常稀疏 ;
  • 易扩展:的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer) 的扩展,一个是基于存储的扩展(HDFS)。通过横向添加 RegionSever 的机器, 进行水平扩展,提升 Hbase 上层的处理能力,提升 Hbsae 服务更多 Region 的 能力。
  • 数据多版本:每个单元中的数据可以有多个版本,按照时间戳排序,新的数据在最上面;
  • 采用 HDFS 作为底层存储,支持结构化、半结构化和非结构化的存储;
  • 支持数据分片;
  • 易于使用的 Java 客户端 API,客户端可以通过 HBase 实现对 HDFS 上数据的随机访问;

HBase Table

表 schema 仅定义列族,表具有多个列族,每个列族可以包含任意数量的列,列由多个单元格 (cell )组成,单元格可以存储多个版本的数据,多个版本数据以时间戳进行区分。

  • 所有数据的底层存储格式都是字节数组
  • 不持复杂的事务,只支持行级事务,即单行数据的读写都是原子性的;
  • 查询功能简单,不支持join等复杂操作
  • 仅支持通过主键(row key)和主键的 range 来检索数据;

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 作左填充
  • 行的一次读写操作时原子性的 (不论一次读写多少列)。

Column Family列族

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

Column Qualifier列限定符

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

Cell 单元格

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

Timestamp 时间戳

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

存储结构

Regions

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

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

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

Region Server

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

  • WAL(Write Ahead Log,预写日志):对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间,但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫 做 Write-Ahead logfile 的文件中存储尚未进持久化存储的数据记录,以便在发生故障时进行恢复。
  • BlockCache:读缓存。它将频繁读取的数据存储在内存中,如果存储不足,它将按照 最近最少使 用原则 清除多余的数据。
  • MemStore:写缓存。它存储尚未写入磁盘的新数据,并会在数据写入磁盘之前对其进行排序。 每个 Region 上的每个列族都有一个 MemStore
  • HFile :将行数据按照 Key\Values 的形式存储在文件系统上,是实际的存储文件。

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

系统架构

HBase 系统遵循 Master/Salve 架构,由三种不同类型的组件组成:

Zookeeper

  • 保证任何时候,集群中只有一个 Master;
  • 存贮所有 Region 的寻址入口;
  • 实时监控 Region Server 的状态,将 Region Server 的上线和下线信息实时通知给 Master;
  • 存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family 等信息;

Master

  • 为 Region Server 分配或移除Region ;
  • 负责 Region Server 的负载均衡 ;
  • 处理Region Server 的故障转移;
  • 处理GFS 上的垃圾文件回收;
  • 处理 Schema 的更新请求;

Region Server

  • 负责维护 Master 分配给它的 Region ,并处理发送到 Region 上的 IO 请求;
  • 负责切分在运行过程中变得过大的 Region;
  • 维护HLog
  • 刷新缓存到HDFS
  • 存储HBase的实际数据
  • 压缩数据

三个组件间的协作

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. Client 向 Region Server 提交写请求;
  2. Region Server 找到目标 Region;
  3. Region 检查数据是否与 Schema 一致;
  4. 如果客户端没有指定版本,则获取当前系统时间作为数据版本;
  5. 将更新写入 WAL Log;
  6. 将更新写入 Memstore;
  7. 判断 Memstore 存储是否已满,如果存储已满则需要 flush 为 Store Hfile 文件。

读数据

以下是客户端首次读写 HBase 上数据的流程:

  1. 客户端从 Zookeeper 获取 META 表所在的 Region Server;
  2. 客户端访问 META 表所在的 Region Server,从 META 表中查询到访问行键所在的 Region Server,之后客户端将缓存这些信息以及 META 表的位置;
  3. 客户端从行键所在的 Region Server 上获取数据。
  4. 如果再次读取,客户端将从缓存中获取行键所在的 Region Server。这样客户端就不需要再次查询 META 表,除非 Region 移动导致缓存失效,这样的话,则将会重新查询并更新缓存。

注: META 表是 HBase 中一张特殊的表,它保存了所有 Region 的位置信息,META 表自己的位置信息 则存储在 ZooKeeper 上。

Phoenix

  • Phoenix 是 HBase 的开源 SQL 中间层,它允许使用标准 JDBC 的方式来操作 HBase 上的数据!
  • 在 Phoenix 之前,如果要访问 HBase,只能调用它的 Java API,但相比于使用一行 SQL 就能实现数据 查询,HBase 的 API 还是过于复杂。

Phoenix 的理念是 we put sql SQL back in NOSQL ,即可以使用标准的 SQL 就能完成对 HBase 上数据的操作,这也意味着可以通过集成 Spring Data JPA 或 Mybatis 等常用的持久层框架来操作 HBase。 其次 Phoenix 的性能表现也非常优异, Phoenix 查询引擎会将 SQL 查询转换为一个或多个 HBase Scan,通过并行执行来生成标准的 JDBC 结果集。它通过直接使用 HBase API 以及协处理器和自定义过 滤器,可以为小型数据查询提供毫秒级的性能,为千万行数据的查询提供秒级的性能。同时 Phoenix 还 拥有二级索引等 HBase 不具备的特性,不仅如此 Phoenix 对于用户输入的 SQL 同样会有大量的优化手段(就像 hive 自带 sql 优化器一样),因为以上的优点,所以 Phoenix 成为了 HBase 最优秀的 SQL 中间层。

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

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

相关文章

LeetCode 965.单值二叉树 C写法

LeetCode 965.单值二叉树 C写法 思路🧐: 用前序遍历的方式,如果左结点或右结点不为空且值不相等就直接返回false,如果走完一颗子树,结点为空了就返回true到上一层递归,直到左右子树全部走完,全为…

深入理解PreparedStatement

预处理 Overridepublic boolean login(String username, String userpwd) {Connection con DBUtils.getConnection();try {if(con ! null){PreparedStatement pstmt con.prepareStatement("select username,userpwd from " " users where username? and us…

【靶场实操】sql-labs通关详解----第一节:基础注入方式(Less-1~Less-10)

目录 一、注入方式简要概括 1.1 SQL常见注入方式 1.2 爆破函数 二、靶场实操 2.1 Less-1 2.1.1 判断类型 2.1.2 联合注入查询 2.2 Less-2 2.2.1 判断类型 2.2.2 注入攻击 2.2.3 字符型与数字型漏洞对比 2.3 Less-3 2.3.1 判断 2.3.2 注入 2.4 Less-4 2.4.1 判断…

论文阅读-《Cross-Sentence N-ary Relation Extraction with Graph LSTMs》

这篇论文提出了一种基于图LSTM的跨句子n元关系提取框架,具有很好的创新性。图LSTM能够有效地处理长距离依赖和跨句信息,并且能够方便地整合丰富的语言分析。此外,论文还探索了多任务学习,将n元关系与其子关系进行联合学习&#xf…

WebFlux集成MongoDB

目录 前言 1.简单集成MongoDB 2. yml配置 3.创建用户实体类 4.创建用户CRUD数据访问接口类 5.Controller层 6.postman测试访问 7.代码附在本博文绑定资源 前言 MongoDB广泛应用于非关系型数据库的存储,其主要存储的数据类型有字符串,整数、浮点数…

NAS 软件大盘点:瞧瞧哪个被你遗漏了

很多人都听说过NAS,也有很多人正在使用NAS,而NAS用户通常需要安装一些软件来扩展其功能,毕竟NAS的功能实在是太多了,光是部署与调试就要耗费大量的时间, 小宝集合了NAS相关实用工具,无论是群晖、威联通还是…

3、从0搭建企业门户网站——JDK下载、安装与环境变量配置

目录 ​编辑 正文 1、JDK下载 2、JDK安装 2.1 建立存放目录 2.2 上传文件 2.3 解压 3、JDK环境变量配置 4、检查JDK版本 正文 在CentOs7.5上,安装JDK是必要的,因为我们的网站软件是Java语言开发。下面我们以安装JDK 17为例,介绍整个JDK安装过程。 1、JDK下载 JDK…

Vitis通过TCF远程调试ZYNQ Linux

昨天已经在矿渣板上把petalinux跑起来了,今天准备尝试一下vitis通过TCF远程调试ZYNQ Linux代码,官方和第三方的各种教程满天飞,但还是有几个坑的,教程没说清楚。 1.打开vitis,用vivado导出的xsa文件新建一个platform工…

ChinaJoy 2024,VERYCLOUD睿鸿股份与你相聚

🎮2024 ChinaJoy于26日正式开幕 🕗7月26-28日 🌐VERYCLOUD睿鸿股份在BTOB商务洽谈馆 🌟W4-B785展位 🎇展台交流好礼相送 与多行业好友现场相聚、畅谈🧐 现场游戏企业云集 专业观众、玩家纷至沓来 与游戏/短…

新一代分割一切大模型SAM2(Segment Anything Model 2)介绍,可轻松分割图片与视频

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

KylinOS V10系统上安装yashan数据库单机版

一、服务器准备 这里安装的KylinOS V10桌面版本。 二、依赖项准备 安装桌面版的依赖包都安装好了。 https://doc.yashandb.com/yashandb/23.2/zh/%E5%AE%89%E8%A3%85%E5%92%8C%E5%8D%87%E7%BA%A7/%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2/%E5%AE%89%E8%A3%85%E5%89%8D%E5%87%86…

net start mysql; 服务名无效。 请键入 NET HELPMSG 2185 以获得更多的帮助。 也许你只是写错了名字!!!!!

看样子不知道问题出在哪里,看了别人的文章也不行。 打开服务(命令行输入services.msc)!! 人家叫mysql80 成了~ 就很无语

创邻科技Galaxybase银河图数据库赋能供应链高效协同

随着全球环境从乌卡时代走向巴尼时代,供应链管理能力与水平决定了企业的存生与盈利水平。数据是体现供应链运营状态与价值的核心要素,借助最新的数据处理技术最大限度挖掘数据价值,实现供应链可预测、可追溯、可实时响应,提升供应…

外卖项目day11---用户下单

OrderController代码 RestController("userOrderController") RequestMapping("/user/order") Api(tags "用户端订单相关接口") Slf4j public class OrderController {Autowiredprivate OrderService orderService;/*** 用户下单* param orders…

华硕电脑怎么录屏?3个高效实用的方法

华硕电脑作为一款备受青睐的电脑品牌,拥有丰富的功能和工具,其中包括强大的录屏功能。然而,对于许多华硕电脑用户来说,如何利用这一功能可能会感到困惑。 本文将带您探索华硕电脑的录屏功能,为您揭示华硕电脑怎么录屏…

算法小白的进阶之路(力扣1~5)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Vue3-Vite-TypeScript:屏幕适配rem

① 基于rem 适配(推荐,也是本篇要实现的方案) 适用场景:不固定宽高比的Web应用,适用于绝大部分业务场景 ② 基于 scale 适配 适用场景:固定宽高比的Web应用,如大屏或者固定窗口业务应用 个人…

使用 openai 和 langchain 调用自定义工具完成提问需求

我们提供了一个函数,接受传入运算的字符串,返回运算的结果。 现在的需求是,我们问 gpt 模型,由于模型计算能力并不好,他要调用计算函数,根据计算结果,回答我们的问题。 使用 openai 实现&#…

资源|Python入门必看书籍,适合零基础小白,附PDF

小编为初学Python的朋友们汇总了7本零基础入门书籍,包括Python三剑客等,都是在编程届多年畅销的书籍,也是众多从业者的选择,全文详细介绍了书籍主要内容,有需要的宝子根据自身情况自取 需要书籍PDF的宝子评论区留言哦 …

Java每日一练_模拟面试题1(死锁)

一、死锁的条件 死锁通常发生在两个或者更多的线程相互等待对方释放资源,从而导致它们都无法继续执行。死锁的条件通常被描述为四个必要条件,也就是互斥条件、不可剥夺条件、占有并等待条件和循环等待条件。 互斥条件:资源不能被共享&#x…