【大数据】分布式数据库HBase

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生网关 MSE Higress,422元/月
简介: 【大数据】分布式数据库HBase

1.概述

1.1.前言

本文式作者大数据系列专栏中的一篇文章,按照专栏来阅读,循序渐进能更好的理解

当前的分布式数据库其实都是参考的Google的BigTable,所以学习分布式数据库之前先学一下BigTable会一通百通。

分布式数据库底层依托于分部署文件系统进行存储,分布式数据库更像在分布式文件系统上做了一层封装。就像BigTable底层依托于GFS一样,HBase底层依托于HDFS

1.2.数据模型

HBase中一个具体的数据由行键、列族、列限定符、时间戳组成。数据类型是不定的,统一存储为Bytes数组。

之所以有时间戳是因为HBASE底层是用的HDFS来做存储的,HDFS只支持追加写,所以HBASE为了实现删除效果只能用时间戳来区分哪个数据是最新的。

列族是个很核心的概念,底层的物理存储以列族为单位进行存储,支持动态扩展,一个列族其实就是HDFS中的一个文件,同一列族下的数据一定是被存到HDFS中的一个文件中的。

1.3.列式存储的优势

大数据技术中为什么采用列式存储:

HDBASE采用的这种存储模式叫列式存储,传统的关系型数据库采用的行式存储,大数据中普遍都采用列式存储。大数据中之所以采用列式存储是因为列式存储往往更有利于分析,当需要做指标统计的时候往往只需要访问一个列即可,而且列族在物理磁盘上是连续存储的,速度会很快。行式存储要进行指标统计的时候要访问很多无用的列,而且数据在物理磁盘上也不是连续存储的,性能不会很好。

比如数据表是这样:

行式和列式的区别会是:

2.实现原理

2.1.region

HBase最核心的概念!!!

hbase的架构直接参照bigtable即可,只是改了个名字。bigtable的核心是tablet,HBase的核心是region,存储region的服务器叫region server,对应bigtable中的tablet server。一个表会按照行键的字典序列进行排布,然后被分成多个region:

如何找到要的region?

HBASE参照BigTable的三层结构也维护了一个类树状结构用来快速查找到要的region:

叶子节点是region、meta表负责维护树形的层级结构,一个meta对应多个region,root只有一个,对应多个meta。

层次 名称 作用
第一层 root表 记录了META表的位置信息
第二层 meta表 记录了region表的位置信息,meta表相当于一个集合,将region分块的管理,用来维护了层级结构
第三层 用户表 用来记录用户数据

2.2.LSM树

LSM树是一种专门针对海量数据读写而升的数据结构,前文中作者聊bigtable的时候单独写了一篇文章对LSM树进行过讲解,可移步:

【大数据】LSM树,专为海量数据读写而生的数据结构-CSDN博客

同样HBASE中也用了LSM树,也有类似于memtable和sstable的东西:

memstore->memtable

storefile->sstable

这里HBase和bigtable唯一有区别的就是bigtable的一个tablet里只会有一条线的memtable和sstable,而HBase由于支持多个列族所以会有多条线的memtable和sstable。

2.3.完整读写过程

写过程:

客户端发起写请求 客户端应用通过HBase客户端API(如Java API)向HBase提交一个PUT请求,包含待写入的数据(包括RowKey、列族、列限定符、值以及可选的时间戳等)。


定位目标Region 访问ZooKeeper:客户端首先访问ZooKeeper集群,先查询hbase:root表以获取hbase:meta表所在的Region Server位置。 缓存元数据:客户端将获取到的元数据信息(如hbase:meta表或目标Region的位置)缓存在本地Client Cache中,以减少后续操作对ZooKeeper的依赖和网络开销。


查找目标Region 查询元数据表:客户端使用缓存的信息连接到hbase:meta表所在的Region Server,根据待写入数据的RowKey在hbase:meta表中查找目标Region的位置。这个过程可能涉及Region的三层定位(Namespace、表名、RowKey区间),确保找到正确的Region负责处理该RowKey的数据。 更新缓存:客户端将查询到的目标Region的位置信息(包括Region Server地址和Region边界)更新到本地缓存中。


与目标Region Server交互 发送写请求:客户端根据缓存中的信息,向目标Region Server发送实际的PUT请求。


Region Server内部处理 追加写入HLog(WAL,Write Ahead og):Region Server接收到PUT请求后,首先将写操作作为一条日志记录追加到HLog。HLog是一种预写式日志,用于保证在发生故障时能够恢复未持久化到磁盘的数据。 随机写入MemStore:接着,Region Server将数据随机写入对应Region的MemStore。MemStore是内存中的数据结构,用于临时存储待写入HFile(HBase的数据文件)的修改。


更新BlockCache 读写加速:写入完成后,新写入的数据会被添加到Region Server的BlockCache中。BlockCache是一种基于LRU(最近最少使用)策略的缓存,用于加速后续对相同数据块的读取。

读过程:

定位目标Region 访问ZooKeeper:客户端首先访问ZooKeeper集群,查询HBase的元数据表(hbase:meta)的位置信息。这里同样可能存在旧版流程(先查询hbase:root表)和新版流程(直接查询hbase:meta表)的区别。 缓存元数据:客户端将获取到的元数据信息(如hbase:meta表或目标Region的位置)缓存在本地Client Cache中,以减少后续操作对ZooKeeper的依赖和网络开销。


查找目标Region 查询元数据表:客户端使用缓存的信息连接到hbase:meta表所在的Region Server,根据待读取数据的RowKey在hbase:meta表中查找目标Region的位置。这一步确保客户端知道应该向哪个Region Server的哪个Region发送读请求。 更新缓存:客户端将查询到的目标Region的位置信息更新到本地缓存中。


与目标Region Server交互 发送读请求:客户端根据缓存中的信息,向目标Region Server发送实际的GET请求。


Region Server内部处理 查询BlockCache:Region Server首先在本地BlockCache中查找是否有请求的数据。BlockCache是一种基于LRU(最近最少使用)策略的缓存,存储最近访问过的HFile数据块。如果数据在BlockCache中命中,则直接返回给客户端,避免了磁盘I/O。 查询MemStore:如果BlockCache中未找到数据,Region Server接着在对应Region的MemStore中查找。MemStore存储了尚未刷写到HFile的最新数据,如果请求的数据在这里存在且是最新的版本,则直接返回给客户端。 查询HFile:如果BlockCache和MemStore均未命中,Region Server将从磁盘上的HFile中读取数据。HFile是按RowKey排序的持久化存储文件,通过二分查找等高效算法快速定位数据。读取到的数据将返回给客户端,并可能被加入到BlockCache中以供后续读取加速。 合并版本与过滤:对于同一RowKey的多个版本(依据时间戳区分),Region Server按照请求的时间戳范围或其他过滤条件(如列族、列限定符等)筛选并合并结果集,只返回满足条件的数据版本。


客户端接收响应 处理响应:客户端接收到Region Server返回的数据后,解析并呈现给应用程序。如果请求涉及多个列族或多行数据,客户端可能需要合并来自不同Region Server的响应。


数据flush与compaction:


MemStore flush:当MemStore达到一定大小阈值时,Region Server将其内容刷写到硬盘上的HFile中,并清空MemStore。同时,对应的HLog记录可以被安全地截断(truncated),因为其数据已持久化。 Compaction:随着时间推移,针对同一Region可能会产生多个HFile。HBase后台会定期执行Compaction操作,合并小文件、删除过期版本的数据,并可能进行压缩,以优化读性能和存储空间利用率。


合并没有什么好说的,和bigtable一样,值得注意的是一直合并下去,单体过大后又会分成小块来存储,这个分块存储的过程就会造成一个大region1分成一个个小region。

2.4.master的作用

master主要就是负责整个集群的管理:

  • 通过master来对表进行增删改查
  • 负责region的分布
  • 负责不同region服务器的负载均衡,将负载较重的region服务器上的region重新分布到其它负载轻的region服务器上去。
  • region服务器故障失效后,借助master来将上面的region重新分配给其它服务器。


相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
2月前
|
SQL JSON 大数据
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
这篇文章是Elasticsearch的进阶使用指南,涵盖了Search API的两种检索方式、Query DSL的基本语法和多种查询示例,包括全文检索、短语匹配、多字段匹配、复合查询、结果过滤、聚合操作以及Mapping的概念和操作,还讨论了Elasticsearch 7.x和8.x版本中type概念的变更和数据迁移的方法。
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
|
2月前
|
Java 大数据 分布式数据库
Spring Boot 与 HBase 的完美融合:探索高效大数据应用开发的新途径
【8月更文挑战第29天】Spring Boot是一款广受好评的微服务框架,以其便捷的开发体验著称。HBase则是一个高性能的大数据分布式数据库系统。结合两者,可极大简化HBase应用开发。本文将对比传统方式与Spring Boot集成HBase的区别,展示如何在Spring Boot中优雅实现HBase功能,并提供示例代码。从依赖管理、连接配置、表操作到数据访问,Spring Boot均能显著减少工作量,提升代码可读性和可维护性,使开发者更专注业务逻辑。
98 1
|
2月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
118 0
|
12天前
|
存储 分布式计算 分布式数据库
深入理解Apache HBase:构建大数据时代的基石
在大数据时代,数据的存储和管理成为了企业面临的一大挑战。随着数据量的急剧增长和数据结构的多样化,传统的关系型数据库(如RDBMS)逐渐显现出局限性。
69 12
|
8天前
|
数据采集 分布式计算 MaxCompute
MaxCompute 分布式计算框架 MaxFrame 服务正式商业化公告
MaxCompute 分布式计算框架 MaxFrame 服务于北京时间2024年09月27日正式商业化!
31 3
|
2月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
62 5
|
2月前
|
关系型数据库 MySQL 大数据
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
|
2月前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
2月前
|
分布式计算 大数据 分布式数据库
"揭秘HBase MapReduce高效数据处理秘诀:四步实战攻略,让你轻松玩转大数据分析!"
【8月更文挑战第17天】大数据时代,HBase以高性能、可扩展性成为关键的数据存储解决方案。结合MapReduce分布式计算框架,能高效处理HBase中的大规模数据。本文通过实例展示如何配置HBase集群、编写Map和Reduce函数,以及运行MapReduce作业来计算HBase某列的平均值。此过程不仅限于简单的统计分析,还可扩展至更复杂的数据处理任务,为企业提供强有力的大数据技术支持。
43 1
下一篇
无影云桌面