【HBase】架构

news2025/5/11 5:15:00

文章目录

  • 整体架构
    • Master
      • 负载均衡器
      • 元数据管理器
      • 预写日志处理器
    • Region Server
    • Zookeeper
    • HDFS
  • Master架构
    • Meta 表格
  • RegionServer 架构
    • MemStore
    • WAL
    • BlockCache
  • 读写流程
    • HFile结构
    • 写流程
    • 读操作

整体架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ydfjpHct-1683897227043)(C:/Users/19801/AppData/Roaming/Typora/typora-user-images/image-20230512194607431.png)]

Master

实现类为 HMaster。

负责监控集群中所有的 RegionServer 实例。

(1)管理元数据表格 hbase:meta,接收用户对表格创建修改删除的命令并执行

(2)监控 region 是否需要进行负载均衡故障转移和 region 的拆分

通过启动多个后台线程监控实现上述功能:

负载均衡器

周期性监控 region 分布在 regionServer 上面是否均衡,由参数 hbase.balancer.period 控 制周期时间,默认 5 分钟。

元数据管理器

定期检查和清理 hbase:meta 中的数据。

预写日志处理器

把 master 需要执行的任务记录到预写日志 WAL 中,如果 master 宕机,让 backupMaster 读取日志继续干。

Region Server

实现类为 HRegionServer,

(1)负责数据 cell 的处理,例如写入数据 put,查询数据 get 等

(2)拆分合并 region 的实际执行者,有 master 监控,有 regionServer 执行。

Zookeeper

进行 master 的高可用、记录 RegionServer 的部署信息、并且存储有 meta 表的位置信息

HBase 对于数据的读写操作时直接访问 Zookeeper 的,在 2.3 版本推出 Master Registry 模式,客户端可以直接访问 master。

HDFS

为 Hbase 提供最终的底层数据存储服务,同时为 HBase 提供高容错的支持。

Master架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i22UqahH-1683897227043)(C:/Users/19801/AppData/Roaming/Typora/typora-user-images/image-20230512195231242.png)]

Meta 表格

元数据表管理器 定期管理版本

hbase:meta,只是在 list 命令中被过滤掉了,本质上和 HBase 的其他表格一样。

RowKey:

([table],[region start key],[region id]) 即 表名,region 起始位置和 regionID。

列:

info:regioninfo 为 region 信息,存储一个 HRegionInfo 对象。

info:server 当前 region 所处的 RegionServer 信息,包含端口号。 info:

serverstartcode 当前 region 被分到 RegionServer 的起始时间。

如果一个表处于切分的过程中,即 region 切分,还会多出两列 info:splitA 和 info:splitB, 存储值也是 HRegionInfo 对象,拆分结束后,删除这两列。

注意:

在客户端对元数据进行操作的时候才会连接master。

如果对数据进行读写,直接连接 zookeeper 读取目录/hbase/meta-region-server 节点信息,会记录 meta 表格的位置。直接读 取即可,不需要访问 master,这样可以减轻 master 的压力,相当于 master 专注 meta 表的 写操作,客户端可直接读取 meta 表。

在 HBase 的 2.3 版本更新了一种新模式:Master Registry。客户端可以访问 master 来读取 meta 表信息。加大了 master 的压力,减轻了 zookeeper 的压力。

RegionServer 架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lHRXYldh-1683897227044)(C:/Users/19801/AppData/Roaming/Typora/typora-user-images/image-20230512200253880.png)]

MemStore

写缓存。

由于 HFile 中的数据要求是有序的,所以数据是先存储在 MemStore 中,排好序后,等到达刷写时机才会刷写到 HFile,每次刷写都会形成一个新的 HFile,写入到对应的 文件夹 store 中。一个写缓存对应一个store文件夹。

WAL

由于数据要经 MemStore 排序后才能刷写到 HFile,但把数据保存在内存中会有很高的概率导致数据丢失。

为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件 中,然后再写入 MemStore 中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

BlockCache

读缓存

每次查询出的数据会缓存在 BlockCache 中,方便下次查询。

读写流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQgBH97L-1683897227044)(C:/Users/19801/AppData/Roaming/Typora/typora-user-images/image-20230512210313121.png)]

HFile结构

HFile 是存储在 HDFS 上面每一个 store 文件夹下实际存储数据的文件。

存储数据本身(keyValue 键值对)、元数据记录文件信息数据索引元数据索引和 一个固定长度的尾部信息(记录文件的修改情况)

键值对按照块大小(默认 64K)保存在文件中.

数据索引按照块创建,块越多,索引越 大。

每一个 HFile 会维护一个布隆过滤器(就像是一个很大的地图,文件中每有一种 key, 就在对应的位置标记,读取时可以大致判断要 get 的 key 是否存在 HFile 中)。大致是因为可能有哈希碰撞。

KeyValue 内容如下:

rowlength -----------→ key 的长度

row -----------------→ key 的值

columnfamilylength --→ 列族长度

columnfamily --------→ 列族

columnqualifier -----→ 列名

timestamp -----------→ 时间戳(默认系统时间)

keytype -------------→ Put

可通过 HBase 提供的命令来查看存 储在 HDFS 上面的 HFile 元数据内容。

bin/hbase hfile -m -f /hbase/data/命名空间/表名/regionID/列族/HFile 名

写流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bsyNmAsk-1683897227044)(C:/Users/19801/AppData/Roaming/Typora/typora-user-images/image-20230512200705062.png)]

(1)首先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server;

(2)访问对应的 Region Server,获取 hbase:meta 表,将其缓存到连接中,作为连接属性 MetaCache,由于 Meta 表格具有一定的数据量,导致了创建连接比较慢

之后使用创建的连接获取 Table,这是一个轻量级的连接,只有在第一次创建的时候会检查表格是否存在访问 RegionServer,之后在获取 Table 时不会访问 RegionServer;

(3)调用Table的put方法写入数据,此时还需要解析RowKey对照缓存的MetaCache, 查看具体写入的位置有哪个 RegionServer;

(4)将数据顺序写入(追加)到 WAL,此处写入是直接落盘的,并设置专门的线程控制 WAL 预写日志的滚动(类似 Flume);

(5)根据写入命令的 RowKey 和 ColumnFamily 查看具体写入到哪个 MemStory,并且 在 MemStory 中排序;

(6)向客户端发送 ack;

(7 )等达到 MemStore 的刷写时机后,将数据刷写到对应的 store 中。

读操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tJNcB9A2-1683897227045)(C:/Users/19801/AppData/Roaming/Typora/typora-user-images/image-20230512201551197.png)]

优先访问 Block Cache,查找是否之前读取过,并且可以读取 HFile 的索引信息和 布隆过滤器。

不管读缓存中是否已经有数据了(可能已经过期了),都需要再次读取写缓存和 store 中的文件。

最终将所有读取到的数据合并版本,按照 get 的要求返回即可。

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

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

相关文章

在Fedora-Workstation-Live-x86_64-36-1.5中使用佳能喷墨打印机ip2780

在Fedora-Workstation-Live-x86_64-36-1.5中使用佳能喷墨打印机ip2780 操作系统是64位的Fedora-Workstation-Live-x86_64-36-1.5.iso,实物打印机是佳能ip2780,USB接口 应用程序——其它——设置——打印机——解锁——输入root密码——将打印机USB插入电…

Redis数据结构——动态字符串、Dict、ZipList

一、Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题: 获取字符串长度…

智慧产业城彰显中国智造魅力,中联重科踏出“走上去”的关键一步

5月11日至14日,中联重科在长沙举行了“科技献礼新时代”系列活动。 借着活动,松果财经实地探访了全球规模最大、品种最全的工程机械产业基地,领略了前沿技术赋能先进制造的魅力。 作为湖南省“一号工程”和“十大重点项目之首”&#xff0c…

好家伙,又一份牛逼笔记面世了...

最近网传的一些裁员的消息,搞的人心惶惶。已经拿到大厂offer的码友来问我:大厂还能去,去了会不会被裁。 还在学习的网友来问我:现在还要冲互联网么? 我是认为大家不用恐慌吧,该看啥看啥,该学啥…

你一定要知道的unittest自动化测试框架详解

目录 框架的概念 Unittest单元测试框架 常用的assert语句 unittest创建测试代码的方式: unittest构建测试套件(测试用例集合): unittest忽略测试用例: 运行测试集 批量执行测试用例 生成HTMLTestRunner测试报告…

【运维知识进阶篇】集群架构-Nginx基础(安装+启动+配置+多业务实现+日志管理)

本篇文章介绍下Nginx有关内容,Nginx是一个开源且高性能、可靠的Http Web服务、代理服务。 开源:直接获取源代码,高性能:支持海量并发,可靠:服务稳定 Web服务有很多,选择Nginx是因为他的轻量化…

【软件测试】测试开发的一生之敌-BUG

文章目录 1.前言2.如何描述/创建一个BUG3.BUG的级别4.BUG的生命周期5.跟开发产生争执怎么办 1.前言 BUG相比大家都知道,程序运行出错或者与预期不符就是BUG.现在我们来用测试人员的角度来看待BUG. 2.如何描述/创建一个BUG 测试人员要测试开发人员的代码,找出开发人员可能忽略…

敏态开发在大兴机场数字化转型中的实践

一、最大事业是育人 大兴机场是一个年轻的企业,作为一个企业来讲,最宝贵的就是人才。我们在2017年开始社招大学生,到目前为止,公司有一半都是30岁左右的年轻人,并且每年都会招几十个。年轻人特别想做事,而…

C++之内存管理及函数模版

C中的内存管理机制和C语言是一样的,但在具体内存管理函数上,C语言的malloc已经无法满足C面向对象销毁的需求,于是祖师爷在C中新增了一系列内存管理函数,即 new 和 delete 著名段子:如果你还没没有对象,那就…

( 位运算 ) 342. 4的幂 ——【Leetcode每日一题】

❓342. 4的幂 难度:简单 给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 4 的幂次方需满足:存在整数 x 使得 n 4 x n 4^x n4x。 示例 1&…

src学习记录(二)

学习目标: Apache Shiro ThinkPHP struts2 Apache Log4j Fastjson Weblogic 学习内容: 1.Apache Shiro 字段内容指纹信息请求包中,在Cookie信息中给 rememberMe变量赋任意值,收到返回包的Set-Cookie 值存在 rememberMedeleteMe …

类和对象【C++】【下篇】

目录 一、初始化列表 二、隐式类型转换 三、静态成员 四、友元 1、友元函数 2、友元类 五、内部类 六、匿名对象 一、初始化列表 下面是日期类的一个构造函数,调用该构造函数后,对象中已经有了一个初始值,但并不能将它称为对对象成员变…

实时操作系统内存管理-TLSF算法

内存管理-TLSF算法 前言TLSF算法:为什么内存又叫内存“块”:O(1)查找空闲块:确定fl:确定sl:提级申请:分割块: 空闲块如何串成链表?减少外部碎片:查找上下块: …

Java补充之MySQL入门必备知识

文章和代码已经归档至【Github仓库:https://github.com/timerring/java-tutorial 】或者公众号【AIShareLab】回复 java 也可获取。 文章目录 零基础学MySQL解决之道文件、数据库MySQL 数据库的安装和配置使用命令行窗口连接MYSQL 数据库操作示意图 数据库三层结构数…

使用Intellij IDEA创建新项目时,maven路径总是默认的,一创建maven就卡死

目录 使用Intellij IDEA创建新项目时,maven路径总是默认的 弄了老半天,终于把这个破玩意给弄好了,真的没有意思,真的很恶心 我经历了两个过程,一个是 使用Intellij IDEA创建新项目时,maven路径总是默认的…

用免费蜜罐工具配置Modbus工控蜜罐

导语:本文将用DecoyMini免费蜜罐工具来配置自定义的ModbusTCP工控仿真模板,并介绍部署后的Modbus蜜罐的使用效果。 DecoyMini是一个免费的蜜罐工具,其特色是仿真能力采用与软件松耦合的仿真模板来进行管理。通过一键式导入云端仿真模板库里的…

【Linux】多线程 --- 线程同步与互斥+生产消费模型

人生总是那么痛苦吗?还是只有小时候是这样? —总是如此 文章目录 一、线程互斥1.多线程共享资源访问的不安全问题2.提出解决方案:加锁(局部和静态锁的两种初始化/销毁方案)2.1 对于锁的初步理解和实现2.2 局部和全局锁…

计算机中丢失msvcr120.dll怎么办,电脑找不到msvcr120.dll怎么办

电脑提示msvcr120.dll丢失是一个常见的问题,这个问题通常会在你尝试打开某些程序或游戏时出现。这个问题的原因是因为你的电脑缺少了一个名为msvcr120.dll的文件,这个文件是微软Visual C Redistrle for Visualv 2013的一部分。如果你遇到了这个问题&…

算法设计 || 第5题:田忌赛马-杭州电子科技大学(贪心算法)

目录 (一)杭电原题 (二)Please speak Chinese: (三)手写草稿理解思路核心算法 第一款代码: 第二款代码: (一)杭电原题 Tian Ji -- The Horse Racing Pro…