HBase 的关键流程解析

news2024/11/26 16:44:53

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


正文

在这里插入图片描述

HBase 客户端会将查询过的 HRegion 的位置信息进行缓存,如果客户端没有缓存一个HRegion 的位置或者位置信息是不正确的,客户端会重新获取位置信息。

如果客户端的缓存全部失效,则需要进行多次网络访问才能定位到正确的位置。

1. Region 的分配

任何时刻,一个Region 只能分配给一个 RegionServer。

Master 跟踪当前有哪些可用的 RegionServer,以及当前哪些 Region 分配给了哪些 RegionServer,哪些Region 还没有分配。

当存在未分配的 Region 且有一个RegionServer 上有可用空间时,Master 就给这个RegionServer 发送一个装载请求,把 Region 分配给这个 RegionServer。

RegionServer 得到请求后,就开始对此 Region 提供服务。

2. RegionServer 上线

Master 使用 Zookeeper 来跟踪 RegionServer 状态。

当某个 RegionServer 启动时,会首先在 ZooKeeper 上的 rs 目录下建立代表自己的文件,并获得该文件的独占锁。

由于 Master 订阅了rs目录上的变更消息,当rs目录下的文件出现新增或删除操作时, Master可以得到来自 ZooKeeper 的实时通知。

因此一旦 RegionServer 上线,Master 能马上得到消息。

3. RegionServer 下线

当 RegionServer 下线时,它和Zookeeper 的会话断开,Zookeeper 会自动释放代表这台 Server 的文件上的独占锁,而 Master 不断轮询 rs 目录下文件的锁状态。

如果Master 发现某个 RegionServer 丢失了它自己的独占锁,Master 就会尝试去获取代表这个RegionServer 的读写锁,一旦获取成功,就可以确定:

  1. RegionServer 和 ZooKeeper 之间的网络断开了;
  2. RegionServer 失效了。

只要这两种情况中的一种情况发生了,无论哪种情况,RegionServer 都无法继续为它的 Region 提供服务,此时 Master 会删除 Server 目录下代表这台 RegionServer的文件,并将这台RegionServer的Region 分配给其他还“活者” 的机器。

如果网络短暂出现问题导致 RegionServer 丢失了它的锁,那么 RegionServer 重新连接到Zookeeper 之后,只要代表它的文件还在,它就会不断尝试获取这个文件上的锁,一旦获取到了,就可以继续提供服务。

4. Master 上线

Master 启动上线包括以下步骤。

  1. 从Zookeeper 上获取唯一代表 Master 的锁,用来阻止其他节点成为 Master
  2. 扫描 Zookeeper 上的 Server 目录,获得当前可用的 RegionServer 列表。
  3. 与每个 RegionServer 通信,获得当前已分配的 Region 和 RegionServer 的对应关系。
  4. 扫描.META.region 的集合,计算得到当前还未分配的 Region,将它们放人待分配 Region 列表。

5. Master 下线

由于 Master 只维护表和 Region 的元数据,而不参与表数据 IO 的过程,所以 Master 下线仅导致所有元数据的修改被冻结。

此时无法创建、删除表,无法修改表的 schema, 无法进行 Region 的负载均衡,无法处理 Region 上下线,无法进行 Region 的合并,唯一例外的是 Region 的split 可以正常进行,因为只有 RegionServer 参与,表的数据读写还可以正常进行。

因此Master 下线短时间内对整个 HBase 集群没有影响。

从上线过程可以看到,Master 保存的信息全是冗余信息,都可以从系统其他地方收集或者计算出来。

因此,一般 HBase 集群中总是有一个 Master 在提供服务,还有一个以上的“Master〞在等待时机抢占它的位置。

当客户端要修改 HBase 的数据时,首先创建一个action(比如 put、delete、incr 等操作),这些action 都会被包装成 Key-Value 对象,然后通过 RPC 将其传输到 HRegionServer 上。

HRegionServer 将其分配给相应的 HRegion, HRegion 先将数据写人 Hlog 中,然后将其写人 MemStore。

MemStore 中的数据是排序的,当 MemStore 累计到一定网值时,就会创建一个新的 MemStore,并且将老的 MemStore 添加到fush 队列,由单独的线程 flush 到磁盘上,成为一个 StoreFile。

与此同时,系统会在Zookeeper 中记录一个redo point,表示这个时刻之前的变更已经持久化了。

当系统出现意外时,可能导致内存 (MemStore) 中的数据丢失,此时使用 Log ( WAL log)来恢复 redo point 之后的数据。

StoreFile 是只读的,一旦创建后就不可以再修改,因此 HBase 的更新其实是不断追加的操作。

当一个 Store 中的 StoreFile 达到一定的阈值后,就会进行一次合并,将对同一个key 的修改合并到一起,形成一个大的 StoreFile。

由于对表的更新是不断追加的,处理读请求时,需要访问 Store 中全部的 StoreFile 和MemStore,将它们的数据按照row key 进行合并,由于 StoreFile 和 MemStore 都是经过排序的,并且 StoreFile 带有内存中索引,所以合并的过程还是比较快的。


总结

本文主要介绍了 HBase 中 Region 的分配、RegionServer 的上下线、Master 的上下线等相关内容。

其中,Region 只能分配给一个 RegionServer,Master 通过 Zookeeper 来跟踪 RegionServer 状态,当 RegionServer 上线或下线时,Master 会相应地进行处理。

Master 下线仅导致所有元数据的修改被冻结,对整个 HBase 集群没有影响。

在 HBase 中,更新是不断追加的操作,处理读请求时需要访问 Store 中全部的 StoreFile 和 MemStore,将它们的数据按照 row key 进行合并。

思维导图

在这里插入图片描述

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

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

相关文章

【Python爬虫】采集电商商品评价信息

目录 一、数据采集逻辑二、数据Schema三、数据爬取1.导入库2.对爬虫程序进行伪装3.抓取商品评论信息4.防止反爬,每爬取一页数据后,设置程序休眠环节 四、数据存储1. 存储到csv 2.存储到数据库 一、数据采集逻辑 在进行数据采集之前,明确哪些…

Linux下C语言文件描述符操作(dup / dup2 / sendfile / splice / tee)

Linux的哲学是一切皆文件&#xff0c;而操作文件是通过文件描述符来进行。本文梳理一下dup / dup2 / sendfile / splice/ tee函数对文件描述符的操作。 目录 1.dup 2.dup2 3.sendfile 4.splice 5.tee 1.dup #include <unistd.h> int dup(int fd); 复制一个现有的…

Java基础(maven)——maven新建项目 常用IO工具 Durid数据库工具 案例

目录 引出用Maven建项目0.Maven配置方式1.io流的工具IOUtils/FileUtils1&#xff09;可以读文件、按照行读、读网页等&#xff1b;2&#xff09;配合hasmap进行简体繁体转换 2.durid数据库连接工具1&#xff09;创建连接&#xff0c;durid进行连接管理2&#xff09;查询的方式q…

chatgpt赋能python:Python中的转置函数-一种简单而高效的矩阵操作

Python中的转置函数 - 一种简单而高效的矩阵操作 作为一名10年的Python编程经验工程师&#xff0c;掌握利用Python进行矩阵操作是必不可少的。Python中提供了各种高效的矩阵操作功能&#xff0c;其中之一就是转置函数。 什么是转置&#xff1f; 在数学中&#xff0c;矩阵转置…

追寻幸福:探索幸福的关键特征和行为

目录 1. 积极的心态 2. 良好的人际关系 3. 自我接纳和自尊 4. 追求意义和目标 5. 健康的身心状态 6. 感知和实现个人价值 幸福是一个主观的感受&#xff0c;因此不同的人对于幸福的定义和追求方式可能会有所不同。然而&#xff0c;有一些共同的特点和行为模式&#xff0c…

【数据结构】难度上一个台阶的二叉树实现

【数据结构】难度上一个台阶的二叉树实现 一、什么是树和二叉树&#xff1f;二、目标三、实现3.1、初始化工作3.2、二叉树的前序遍历3.2.1、原理图解3.2.2、代码实现 3.3、二叉树的创建3.3.1、原理解析3.3.2、代码实现 3.4、二叉树的中序遍历3.5、二叉树的后序遍历3.6、二叉树的…

K8S系列文章之快速入门K8S

搭建K8S环境 前置 目前生产部署Kubernetes 集群主要有两种方式&#xff1a; kubeadm Kubeadm 是一个K8s 部署工具&#xff0c;提供kubeadm init 和kubeadm join&#xff0c;用于快速部署Kubernetes 集群。 官方地址&#xff1a;https://kubernetes.io/docs/reference/setu…

ChatGPT出来后,为什么老有人想让我们程序员失业?

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步…

【LeetCode每日一题】——1248.统计「优美子数组」

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 滑动窗口 二【题目难度】 中等 三【题目编号】 1248.统计「优美子数组」 四【题目描述】 给…

NVIDIA NCCL 源码学习(十)- 多机间ncclSend和ncclRecv的过程

先回忆一下单机的执行流程&#xff0c;用户执行ncclSend之后通过ncclEnqueueCheck将sendbuff&#xff0c;sendbytes&#xff0c;peer等信息保存到了comm->p2plist中&#xff1b;然后执行ncclGroupEnd&#xff0c;如果发现channel没有建立到peer的链接则先建链&#xff0c;然…

深入理解设计原则之接口隔离原则(ISP)

系列文章目录 C高性能优化编程系列 深入理解设计原则系列 深入理解设计模式系列 高级C并发线程编程 LSP&#xff1a;接口隔离原则 系列文章目录1、接口隔离原则的定义和解读2、案例解读3、如何判断一个接口是否符合接口隔离原则&#xff1f;小结 1、接口隔离原则的定义和解读…

网络工程师一定要会关键技能:如何进行IP子网划分?

对于所有从事IP网络方面工作的工程师来说&#xff0c;进行IP子网划分操作属于一个必备的关键技能&#xff0c;也属于必须掌握的专业内容&#xff1b;但对于初学者来说&#xff0c;真正理解IP子网划分的概念也是一件相当困难的事情。 怎样才能正确地进行子网划分操作 IP子网划…

影响现代办公室隔断设计的因素有哪些,办公室隔断设计方案要求

影响现代办公室隔断设计的因素有哪些 1. 办公空间的用途和功能要求 2. 员工数量及工作场所的布局 3. 设计风格和企业文化要求 4. 预算和材料选择 5. 环保节能和安全性要求 办公室隔断设计方案要求&#xff1a; 1. 合理利用空间&#xff0c;满足办公室的功能需求 2. 设计…

Creepypastsa VoxEdit 竞赛

召唤所有恐怖都市传闻爱好者。 通过 Creepypasta VoxEdit 竞赛&#xff0c;潜入黑暗领域&#xff0c;并释放你们的创造力&#xff01;踏入阴森恐怖的神秘世界&#xff0c;把你最可怕的噩梦变成现实&#xff01; 设计终极的 Creepypasta 体素资产 你是恐怖大师吗&#xff1f;是一…

RHCE 作业三

1.基于域名访问网站 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# systemctl disable firewalld [rootserver ~]# yum install httpd -y [rootserver ~]# systemctl start httpd [rootserver ~]# syst…

npm发包/发布群组过程记录

目录 创建群组 本地发包 1、初始化本地的包到群组 2、 登录npm账号 3、设置公开库 4、发布到npm上 5、升级更新发布 创建群组 打开npm的网站&#xff0c;登录个人账户密码--->点击右侧上方个人的头像--->在下拉框点击【add Organization】 接下来会出现一个添加群…

C语言 打印杨辉三角

杨辉三角的前五行如下&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1、首先我们可以定义定义一个5行5列的二维数组 代码&#xff1a; int main() {int arr[5][5] { 0 };初始化int i 0;int j 0;//循环输出for (i 0; i < 5; i) {for (j 0; j <5; j) {printf("…

华为OD机试之寻找相同子串(Java源码)

寻找相同子串 题目描述 给定一个字符串s&#xff0c;最多只能进行一次变换&#xff0c;返回变换后能得到的最小字符串&#xff08;按照字典序进行比较&#xff09;。 变换规则&#xff1a;交换字符串中任意两个不同位置的字符。 输入描述 一串小写字母组成的字符串s 输出描述 …

华硕天选FA506IU(R7 4600h)电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件配置 硬件型号驱动情况 主板华硕天选FA506IU 处理器AMD Ryzen 7 4600h已驱动 内存8GB DDR4 3200MHz已驱动 硬盘东芝 KXG5AZNV256G Windows 10已驱动 显卡集成显卡…

基于MapReduce的京东20年口红数据的分析与实现

基于MapReduce的京东20年口红数据的分析与实现 文章目录 基于MapReduce的京东20年口红数据的分析与实现一、前言二、数据可视化1、安装Python和Flask框架2、创建Flask应用程序3、创建基于Echarts的网页展示代码4、最终结果 三、最后我想说 一、前言 这是一个利用HadoopMapRedu…