HBase-架构与设计

HBase架构与设计

  • 一、背景
  • 二、HBase概述
    • 1.设计特点
    • 2.适用场景
      • 2.1 海量数据
      • 2.2 稀疏数据
      • 2.3 多版本数据
      • 2.4 半结构或者非结构化数据
  • 三、数据模型
    • 1.RowKey
    • 2.Column Family
    • 3.TimeStamp
  • 四、HBase架构图
    • 1.Client
    • 2.Zookeeper
    • 3.HMaster
    • 4.HRegionServer
    • 5.HRegion
    • 6.Store
    • 7.StoreFile
    • 8.HLog
  • 五、元数据存储
    • 1.元数据表
    • 2.数据结构
  • 六、写流程
    • 1.获取Meta元数据
    • 2.获取RegionServer
    • 3.发送写入请求
  • 七、读流程
    • 1.获取Meta元数据
    • 2.获取RegionServer
    • 3.发送读请求
  • 八、持久化
    • 1.恢复机制
    • 2.MemStore 刷盘
      • 2.1 Memstore级别限制
      • 2.2 Region级别限制
      • 2.3 Region Server级别限制
      • 2.4 HLog数量上限
      • 2.5 定期刷新Memstore
      • 2.6 手动flush
    • 3.HFile 合并
      • 3.1 合并原理
      • 3.2 Minor Compaction
      • 3.3 Major Compaction
  • 总结
    • 参考链接


一、背景

HBase是一个基于java的NoSQL分布式列存储数据库,主要用于存储非结构化和半结构化的松散数据。将Hadoop中的HDFS作为底层文件存储系统,来提供容错和可靠性,以及存储系统的拓展性。
HBase的设计思想来自Google的Bigtable论文,是分布式数据库的实现。HDFS是一个高可靠、高延迟的分布式文件系统,但是不支持对数据的随机访问和更新,因此不适合实时计算系统。HBase是一个可以提供实时计算的大数据分布式数据库,支持对数据的随机访问和更新。

二、HBase概述

HBase的底层存储引擎是基于LSM-Tree数据结构设计的,存储是基于HDFS。而针对数据的更新和删除,不是修改原有记录而是新增一条记录,这样可以充分发挥顺序写的性能,但是查询的时候就需要查询磁盘中的文件和内存中的操作,读取所有数据版本。因此HBase写性能比读性能提高了两个数量级。

1.设计特点

  • 强一致性读写:HBase时强一致性读写,适合高速计数聚合之类的任务。
  • 自动分片:HBase表会按照水平方向拆分成Region分布在集群上,Region会随着数据增长自动拆分和重新均衡。
  • 故障转移:RegionServer如果发生故障会自动恢复
  • 集成HDFS:HBase内部集成HDFS作为其持久化存储组件
  • 支持MapReduce:HBase支持MapReduce进行大规模并行处理,支持写入和读取。
  • 查询优化:HBase通过块缓存和布隆过滤器来优化大容量查询

2.适用场景

2.1 海量数据

传递RDRMS当数据量增大时,需要读写分离策略来解决服务器压力。如果数据量继续增加就需要分库分表,这就限制了一些关联查询并引入中间层。每次变动都需要很多准备工作和业务代码修改验证。而且即使分库分表也无法解决一些数据倾斜和热点问题。HBase支持自动水平拓展,内部集成HDFS解决数据可靠性,还支持利用MapReduce进行海量数据分析。

2.2 稀疏数据

HBase作为列式存储适合稀疏数据,针对为null的列不会进行存储,这样可以节约存储空间并提高读性能。

2.3 多版本数据

HBase的更新和删除操作不会修改原有记录而是通过新增记录实现。通过RowKey和ColumnKey定位到多个TimeStamp相关的Value值,因此可以存储变动历史记录。可以通过设置版本数量,来确定HBase保留几次变动记录。

2.4 半结构或者非结构化数据

HBase无固定模式,不需要停机进行维护,支持半结构和非结构化的数据。

三、数据模型

作为一个面向列的分布式数据库,存储的数据是稀疏、多维、有序的。HBase表中的一条数据是由全局唯一的键(RowKey)和任意数量的列(Column),一列或者多列组成一个列族(Column Family)。
在这里插入图片描述

1.RowKey

RowKey与关系型数据库中的主键类似,用来唯一标识某行数据。整个表是按照RowKey进行排序。HBase按照RowKey划分为多个Region存储在不同的Region Server上,可以分布式对表进行存储和读取。

2.Column Family

Column Family是列族,一个列族可以包含多列。同一个列族中列数据都存储在Region的一个Store中。

3.TimeStamp

TimeStamp 是实现 HBase 多版本的关键。在HBase 中,使用不同 TimeStamp 来标识相同RowKey对应的不同版本的数据。

四、HBase架构图

HBase采用Master/Slave架构搭建集群,属于Hadoop生态系统的一部分。🈶HMaster节点、HRegionServer节点、Zookeeper集群组成,而数据会存储在HDFS中。整体架构如下图:
在这里插入图片描述
对HBase架构组成的每一个部分介绍如下。

1.Client

用户访问HBase的客户端,主要是包含HBase的接口,会缓存元数据来加快对HBase的访问。

2.Zookeeper

Zookeeper主要协调和管理HMaster和HRegionServer。HMaster和HRegionServer启动时会向Zookeeper进行注册。作用如下:

  • 保证任何时候,集群中只有一个HMaster。
  • 存储所有HRegion的寻址入口。
  • 实时监控HRegionServer的上线和下线信息,并通知给HMaster
  • 存储HBase的Schema和Table元数据

3.HMaster

负责管理RegionServer并实现负载均衡,管理和分配Region,管理namespace和table元数据。

4.HRegionServer

用来维护HMaster分配的region,处理这些region的读写请求,并且负责将运行过程中过的region进行切分。

5.HRegion

Region是HBase中分布式存储和负责均衡的最小单位。HBase表按照行方向被拆分为多个Region。不同的Region可以分布在不同的HRegionServer上,同一个Region只能在同一个HRegionServer上。当Region的某个列族达到一定阀值会被拆分成两个新的Region。

6.Store

每个Region按照ColumnFamily拆分成Store,一个Region由一个或者多个Store组成。每个ColumnFamliy会建一个Store,一个Store由一个memStore和多个StoreFile组成。

7.StoreFile

memStore中的数据写到文件之后就是StoreFile。StoreFIle底层就是HFile的格式保存在存储系统中。

8.HLog

记录数据的所有变更和操作日志,用来故障恢复。当Region Server出现故障,可以通过HLog恢复数据

五、元数据存储

1.元数据表

HBase中有一个系统表hbase:meta来存储HBase元数据。该表保存了所有的Region信息,hbase:meta也是一个HBase表被HRegionServer管理,hbase:meta表的位置信息保存在Zookeeper中。

2.数据结构

元数据表有一个RowKey和一个ColumnFamily组成,其中RowKey包括表名、起始Key、region编号。只包含一个info列族,包含三列:

  • info:regioninfo:regionId,tableName,startKey,endKey,offline,split,replicaId;
  • info:server:HRegionServer对应的server:port;
  • info:serverstartcode:HRegionServer的启动时间戳。

六、写流程

HBase的写入过程由于相当于添加新记录,因此写数据比读数据快,整体流程如下:
在这里插入图片描述

1.获取Meta元数据

首先需要知道表的元数据,也就是要知道表的region列表,这个信息时维护在meta表中。
1.1 client访问zookeeper获取Meta表所在的RegionServer信息
1.2 从zookeeper节点返回meta的RegionServer1信息

2.获取RegionServer

从Meta表中查询表的Region信息以及负责Region维护的RegionServer信息。
2.3 根据表名和RowKey向meta所在的RegionServer1发送查询请求
2.4 RegionServer1找到对应的meta的记录,返回对应Region信息,其中包括RegionServer2信息。Client会缓存此Region信息。

3.发送写入请求

向RegionServer2发送写请求。
3.5 向Region所在的RegionServer2发送写请求
3.6 RegionServer2将数据先写入到HLog,为了数据的持久化和恢复
3.7 RegionServer2将数据写入到MemStore。
3.8 RegionServer2返回给Client告知写入成功。

七、读流程

HBase读取数据需要返回所有版本数据,所以可能需要查询所有HFile文件,读性能比写慢了两个数量级。读取流程获取Meta元数据和RegionServer的过程和写过程一致。
在这里插入图片描述

1.获取Meta元数据

跟写过程一致

2.获取RegionServer

跟写过程一致

3.发送读请求

向RegionServer2发送写请求。
3.5 向Region所在的RegionServer2发送写请求
3.6 先在MemStore进行查找
3.7 如果MemStore没有,则需要在BlockCache中查找
3.8 如果BlockCache没有,则需要在StoreFile上查找
3.9 如果StoreFile查到到数据,需要将数据写入到BlockCache,再返回给Client。

八、持久化

1.恢复机制

上边的写请求过程可知,数据会先写入到HLog,然后再写入到内存MemStore。

  • HLog保存的是RegionServer上所有的日志操作,是记录操作的一种日志。当MemStore数据还没有持久化时,可以通过HLog进行故障恢复,保证数据正确性和持久化。
  • MemStore是在内存中维持列族数据按照RowKey顺序排列,然后顺序写入到磁盘中。主要是为了将来检索优化,将数据写入到HDFS之前在内存中将数据完成排序。

2.MemStore 刷盘

MemStore维持当前在内存中的同一个列族数据按照RowKey有序,当MemStore达到一定时机时会将MemStore中数据以HFile形式持久化到文件系统中。Flush触发条件如下:

2.1 Memstore级别限制

当Region中任意一个MemStore的大小达到了上限(hbase.hregion.memstore.flush.size,默认128MB),会触发Memstore刷新

<property><name>hbase.hregion.memstore.flush.size</name><value>134217728</value>
</property>

2.2 Region级别限制

当Region中所有Memstore的大小总和达到了上限(hbase.hregion.memstore.block.multiplier * hbase.hregion.memstore.flush.size,默认 2* 128M = 256M),会触发memstore刷新

<property><name>hbase.hregion.memstore.flush.size</name><value>134217728</value>
</property>
<property><name>hbase.hregion.memstore.block.multiplier</name><value>4</value>
</property> 

2.3 Region Server级别限制

当一个Region Server中所有Memstore的大小总和超过低水位阈值hbase.regionserver.global.memstore.size.lower.limit*hbase.regionserver.global.memstore.size(前者默认值0.95),RegionServer开始强制flush

<property><name>hbase.regionserver.global.memstore.size.lower.limit</name><value>0.95</value>
</property>
<property><name>hbase.regionserver.global.memstore.size</name><value>0.4</value>
</property>
  • 先Flush Memstore最大的Region,再执行次大的,依次执行;
  • 如写入速度大于flush写出的速度,导致总MemStore大小超过高水位阈值,此时RegionServer会阻塞更新并强制执行flush,直到总MemStore大小低于低水位阈值

2.4 HLog数量上限

当一个Region Server中HLog数量达到上限(可通过参数hbase.regionserver.maxlogs配置)时,系统会选取最早的一个 HLog对应的一个或多个Region进行flush

2.5 定期刷新Memstore

默认周期为1小时,确保Memstore不会长时间没有持久化。为避免所有的MemStore在同一时间都进行flush导致的问题,定期的flush操作有20000左右的随机延时。

2.6 手动flush

用户可以通过shell命令flush ‘tablename’或者flush ‘region name’分别对一个表或者一个Region进行flush。

3.HFile 合并

memstore每次刷新都会生成一个新的HFile文件,由于触发机制导致可能生成的大部分新HFile文件都是小文件。这样会导致查询过程中需要遍历非常多的小文件,导致维护困难、影响查询性能和效率。为了查询优化和清理过期数据,所以会对HFile进行合并。Compaction分为两类:Minor Compaction和Major Compaction。

3.1 合并原理

合并原理是指从一个Store中的部分HFile文件整合成一个新的HFile文件,其中会从待合并数据从文件读出,然后按照由小到达排序后写入新文件。

3.2 Minor Compaction

选取部分小的相邻的HFile,将他们合并成一个更大的HFile。

3.3 Major Compaction

将一个Store中所有的HFile合并成一个HFile。同时会清理掉过期、删除、多版本数据。

总结

HBase是基于分布式文件系统HDFS构建的一个大数据、NoSQL、可拓展分布式数据库。采用Master/Slave架构、用Zookeeper进行元数据保存和协调工作。采用LSM-TREE作为存储引擎,由于HDFS不支持修改和更新,所以HBase中将修改和更新作为新记录存储到HDFS中。HBase用牺牲读性能来提升大数据写入能力。


参考链接

1.Hbase原理
2.HBase教程

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10_企业架构NOSQL数据库之MongoDB

企业架构NOSQL数据库之MongoDB 学习目标和内容 1、能够简单描述MongoDB的使用特点 2、能够安装配置启动MongoDB 3、能够使用命令行客户端简单操作MongoDB 4、能够实现基本的数据操作 5、能够实现MongoDB基本安全设置 6、能够操作安装php的MongoDB扩展 一、背景描述及其方案设计…

PlantUML语法(全)及使用教程-类图

目录 1. 类图1.1、什么是类图1.2、元素声明1.3、类之间的关系1.4、关系上的标签1.5、在元素名称和关系标签中使用非字母1.6、添加方法 1. 类图 类图的设计语法与编程语言的传统语法相似。这种相似性为开发人员提供了一个熟悉的环境&#xff0c;从而使创建图表的过程更简单、更直…

接口获取数据控制台打印有值但是展开又没有了

谷歌浏览器只会展现响应式数据最后的结果&#xff0c;证明原来接口是有值的&#xff0c;后面对这个数据进行操作后&#xff0c;最终没有值了。所以对数据进行操作时最好对数据进行一次深拷贝 JSON.parse(JSON.stringify(data))

Apache Flink(七):Apache Flink快速入门 - DataStream BATCH模式

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 下面使用Java代码使用DataStream…

【9】PyQt对话框

目录 1. QMessageBox 2. QIputDialog 对话框是为了更好地实现人与程序的交互 对话框主要是完成特定场景下的功能,比如删除确认等 QDialog的子类有QMessageBox、QFileDialog、QFontDialog、QInputDialog等 1. QMessageBox QMessageBox是普通的对话框 代码示例&#xff1a; …

操作系统的特征

一、并发 并发&#xff1a;指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的&#xff0c;但微观上是交替发生的。 并行 &#xff1a;是指两个或多个事件同一事件发生。 操作系统的并发性指计算机系统中“同时”运行着多个程序&#xff0c;这些程序宏观上看…

CleanMyMac X4.15.0最新官方和谐版下载

Mac系统进行文件清理&#xff0c;一般是直接将文件拖动入“废纸篓”回收站中&#xff0c;然后通过清理回收站&#xff0c;就完成了一次文件清理的操作&#xff0c;但是这么做并无法保证文件被彻底删除了&#xff0c;有些文件通过一些安全恢复手段依旧是可以恢复的&#xff0c;那…

【PyTorch】权重衰减

文章目录 1. 理论介绍2. 实例解析2.1. 实例描述2.2. 代码实现 1. 理论介绍 通过对模型过拟合的思考&#xff0c;人们希望能通过某种工具调整模型复杂度&#xff0c;使其达到一个合适的平衡位置。权重衰减&#xff08;又称 L 2 L_2 L2​正则化&#xff09;通过为损失函数添加惩…

【ArcGIS微课1000例】0078:创建点、线、面数据的最小几何边界

本实例为专栏系统文章:讲述在ArcMap10.6中创建点数据最小几何边界(范围),配套案例数据,持续同步更新! 文章目录 一、工具介绍二、实战演练三、注意事项一、工具介绍 创建包含若干面的要素类,用以表示封闭单个输入要素或成组的输入要素指定的最小边界几何。 工具位于:数…

HarmonyOS开发(十):通知

1、通知概述 1.1、简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知使用的的常见场景&#xff1a; 显示接收到的短消息、即使消息...显示应用推送消息显示当前正在进行的事件&#xff0c…

聚观早报 |东方甄选将上架文旅产品;IBM首台模块化量子计算机

【聚观365】12月6日消息 东方甄选将上架文旅产品 IBM首台模块化量子计算机 新思科技携手三星上新兴领域 英伟达与软银推动人工智能研发 苹果对Vision Pro供应商做出调整 东方甄选将上架文旅产品 东方甄选宣布12月10日将在东方甄选APP上线文旅产品&#xff0c;受这一消息影…

软件工程之需求分析

一、对需求的基本认识 1.需求分析简介 (1)什么是需求 用户需求&#xff1a;由用户提出。原始的用户需求通常是不能直接做成产品的&#xff0c;需要对其进行分析提炼&#xff0c;最终形成产品需求。 产品需求&#xff1a;产品经理针对用户需求提出的解决方案。 (2)为什么要…

Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据

写在前面&#xff1a; 根据Web项目开发需求&#xff0c;需要在H5页面中&#xff0c;通过点击视频列表页中的任意视频进入视频详情页&#xff0c;然后根据视频的链接地址&#xff0c;主要是 .mp4 文件格式&#xff0c;在进行播放时实时的显示该视频的音频轨道情况&#xff0c;并…

短视频购物系统源码:构建创新购物体验的技术深度解析

短视频购物系统作为电商领域的新宠&#xff0c;其背后的源码实现是其成功的关键。本文将深入探讨短视频购物系统的核心技术和源码设计&#xff0c;以揭示其如何构建创新购物体验的技术奥秘。 1. 技术架构与框架选择 短视频购物系统的源码首先考虑的是其技术架构。常见的选择…

多传感器融合SLAM在自动驾驶方向的初步探索的记录

1. VIO的不可观问题 现有的VIO都是解决的六自由度的问题, 但是对于行驶在路面上的车来说, 通常情况下不会有roll与z方向的自由度, 而且车体模型限制了不可能有纯yaw的变换. 同时由于IMU在Z轴上与roll, pitch上激励不足, 会导致IMU在初始化过程中尺度不准以及重力方向估计错误,…

华为数通---BFD多跳检测示例

定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网络设备需要…

User: zhangflink is not allowed to impersonate zhangflink

使用hive2连接进行添加数据是报错&#xff1a; [08S01][1] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. User: zhangflink is not allowed to impersonate zhangflink 有些文章说需要修…

App的测试,和传统软件测试有哪些区别?应该增加哪些方面的测试用例?

从上图可知&#xff0c;测试人员所测项目占比中&#xff0c;App测试占比是最高的。 这就意味着学习期间&#xff0c;我们要花最多的精力去学App的各类测试。也意味着我们找工作前&#xff0c;就得知道&#xff0c;App的测试点是什么&#xff0c;App功能我们得会测试&#xff0…

2023 IoTDB 用户大会成功举办,深入洞察工业互联网数据价值

2023 年 12 月 3 日&#xff0c;中国通信学会作为指导单位&#xff0c;Apache IoTDB Community、清华大学软件学院、中国通信学会开源技术委员会联合主办&#xff0c;“科创中国”开源产业科技服务团和天谋科技&#xff08;北京&#xff09;有限公司承办的 2023 IoTDB 用户大会…

学习极市开发平台

这是官网的链接&#xff1a;极市开发者平台-计算机视觉算法开发落地平台-极市科技 (cvmart.net) 第一次用这个平台有很多问题&#xff0c;首先在使用这个平台之前&#xff0c;我大部分时候使用的是百度的飞浆平台&#xff0c;也就是BML&#xff0c;去训练一些深度学习的模型。 …