Hbase基本原理剖析

news2024/11/29 2:54:33

一、基本原理

数据存储使用HBase来承接,HBase是一个开源的、面向列(Column-Oriented)、适合存储海量非结构化数据或半结构化数据的、具备高可靠性、高性能、可灵活扩展伸缩的、支持实时数据读写的分布式存储系统。更多关于HBase的信息,请参见:https://hbase.apache.org/。

存储在HBase中的表的典型特征:

  • 大表(BigTable):一个表可以有上亿行,上百万列
  • 面向列:面向列(族)的存储、检索与权限控制
  • 稀疏:表中为空(null)的列不占用存储空间

二、HBase结构

HBase集群由主备Master进程和多个RegionServer进程组成。如下图所示。

在这里插入图片描述

模块说明如下表所示:

名称描述
Master又叫HMaster,在HA模式下,包含主用Master和备用Master。1.主用Master:负责HBase中RegionServer的管理,包括表的增删改查;RegionServer的负载均衡,Region分布调整;Region分裂以及分裂后的Region分配;RegionServer失效后的Region迁移等。2.备用Master:当主用Master故障时,备用Master将取代主用Master对外提供服务。故障恢复后,原主用Master降为备用。
ClientClient使用HBase的RPC机制与Master、RegionServer进行通信。Client与Master进行管理类通信,与RegionServer进行数据操作类通信。
RegionServerRegionServer负责提供表数据读写等服务,是HBase的数据处理和计算单元。RegionServer一般与HDFS集群的DataNode部署在一起,实现数据的存储功能。
ZooKeeper集群ZooKeeper为HBase集群中各进程提供分布式协作服务。各RegionServer将自己的信息注册到ZooKeeper中,主用Master据此感知各个RegionServer的健康状态。
HDFS集群HDFS为HBase提供高可靠的文件存储服务,HBase的数据全部存储在HDFS中。

三、HBase原理

  • HBase数据模型

HBase以表的形式存储数据,数据模型如下图HBase数据模型所示。表中的数据划分为多个Region,并由Master分配给对应的RegionServer进行管理。

每个Region包含了表中一段RowKey区间范围内的数据,HBase的一张数据表开始只包含一个Region,随着表中数据的增多,当一个Region的大小达到容量上限后会分裂成两个Region。您可以在创建表时定义Region的RowKey区间,或者在配置文件中定义Region的大小。
在这里插入图片描述

  • 概念介绍
名称描述
RowKey行键,相当于关系表的主键,每一行数据的唯一标识。字符串、整数、二进制串都可以作为RowKey。所有记录按照RowKey排序后储。
Timestamp每次数据操作对应的时间戳,数据按时间戳区分版本,每个Cell的多个版本的数据按时间倒序存储。
CellHBase最小的存储单元,由Key和Value组成。Key由row、column family、column qualifier、timestamp、type、MVCC version这6个字段组成。Value就是对应存储的二进制数据对象。
Column Family列族,一个表在水平方向上由一个或多个Column Family组成。一个CF(Column Family)可以由任意多个Column组成。Column是CF下的一个标签,可以在写入数据时任意添加,因此CF支持动态扩展,无需预先定义Column的数量和类型。HBase中表的列非常稀疏,不同行的列的个数和类型都可以不同。此外,每个CF都有独立的生存周期(TTL)。可以只对行上锁,对行的操作始终是原始的。
Column列,与传统的数据库类似,HBase的表中也有列的概念,列用于表示相同类型的数据。
  • RegionServer数据存储

RegionServer主要负责管理由HMaster分配的Region,RegionServer的数据存储结构如下图 RegionServer的数据存储结构所示。
在这里插入图片描述
上图 RegionServer的数据存储结构中Region的各部分的说明如表 Region结构说明所示。

Region结构说明

名称描述
Store一个Region由一个或多个Store组成,每个Store对应图 HBase数据模型中的一个Column Family。
MemStore一个Store包含一个MemStore,MemStore缓存客户端向Region插入的数据,当RegionServer中的MemStore大小达到配置的容量上限时,RegionServer会将MemStore中的数据“flush”到HDFS中。
StoreFileMemStore的数据flush到HDFS后成为StoreFile,随着数据的插入,一个Store会产生多个StoreFile,当StoreFile的个数达到配置的最大值时,RegionServer会将多个StoreFile合并为一个大的StoreFile。
HFileHFile定义了StoreFile在文件系统中的存储格式,它是当前HBase系统中StoreFile的具体实现。
HLogHLog日志保证了当RegionServer故障的情况下用户写入的数据不丢失,RegionServer的多个Region共享一个相同的HLog。
  • 元数据表

元数据表是HBase中一种特殊的表,用来帮助Client定位到具体的Region。元数据表包括“hbase:meta”表,用来记录用户表的Region信息,例如,Region位置、起始RowKey及结束RowKey等信息。

元数据表和用户表的映射关系如下图元数据表和用户表的映射关系所示。
在这里插入图片描述

  • 数据操作流程

HBase数据操作流程如下图数据操作流程所示。
在这里插入图片描述

  1. 对HBase进行增、删、改、查数据操作时,HBase Client首先连接ZooKeeper获得“hbase:meta”表所在的RegionServer的信息(涉及namespace级别修改的,比如创建表、删除表需要访问HMaster更新meta信息)。
  2. HBase Client连接到包含对应的“hbase:meta”表的Region所在的RegionServer,并获得相应的用户表的Region所在的RegionServer位置信息。
  3. HBase Client连接到对应的用户表Region所在的RegionServer,并将数据操作命令发送给该RegionServer,RegionServer接收并执行该命令从而完成本次数据操作。

为了提升数据操作的效率,HBase Client会在内存中缓存“hbase:meta”和用户表Region的信息,当应用程序发起下一次数据操作时,HBase Client会首先从内存中获取这些信息;当未在内存缓存中找到对应数据信息时,HBase Client会重复上述操作。

四、HBase HA原理与实现方案

HBase中的HMaster负责region分配,当regionserver服务停止后,HMaster把相应region迁移到其他RegionServer。为了解决HMaster单点故障导致HBase正常功能受到影响的问题,引入HMaster HA模式。
在这里插入图片描述
HMaster高可用性架构通过在ZooKeeper集群创建ephemeral zookeeper node实现的。

当HMaster两个节点启动时都会尝试在ZooKeeper集群上创建一个znode节点master,先创建的成为Active HMaster,后创建的成为Standby HMaster。

Standby HMaster会在master节点添加监听事件。如果主节点服务停止,就会和zooKeeper集群失去联系,session过期之后master节点会消失。Standby节点通过监听事件(watch event)感知到节点消失,会去创建master节点自己成为Active HMaster,主备倒换完成。如果后续停止服务的节点重新启动,发现master节点已经存在,则进入Standby模式,并对master znode创建监听事件。

当客户端访问HBase时,会首先通过ZooKeeper上的master节点信息找到HMaster的地址,然后与Active HMaster进行连接。

五、HBase和HDFS的关系

HDFS是Apache的Hadoop项目的子项目,HBase利用Hadoop HDFS作为其文件存储系统。HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持。除了HBase产生的一些日志文件,HBase中的所有数据文件都可以存储在Hadoop HDFS文件系统上。

六、HBase和ZooKeeper的关系

HBase和ZooKeeper的关系如下图 ZooKeeper和HBase的关系所示。
在这里插入图片描述

  1. HRegionServer以Ephemeral
    node的方式注册到ZooKeeper中。其中ZooKeeper存储HBase的如下信息:HBase元数据、HMaster地址。
  2. HMaster通过ZooKeeper随时感知各个HRegionServer的健康状况,以便进行控制管理。
  3. HBase也可以部署多个HMaster,类似HDFS NameNode,当HMaster主节点出现故障时,HMaster备用节点会通过ZooKeeper获取主HMaster存储的整个HBase集群状态信息。即通过ZooKeeper实现避免HBase单点故障问题的问题。

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

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

相关文章

fpga4fun—发光二极管

发光二极管电子基础知识 LED(发光二极管)是一种半导体器件,当电流通过它时会产生光。 LED 符号看起来像一个二极管,带有阳极 () 和阴极 (-)。 LED 的作用类似于二极管 - 单向导电&…

电脑新装系统优化,win10优化,win10美化

公司发了新的笔记本,分为几步做 1.系统优化,碍眼的关掉。防火墙关掉、页面美化 2.安装必备软件及驱动 3.数据迁移 4.开发环境配置 目录 目录复制 这里写目录标题 目录1.系统优化关掉底部菜单栏花里胡哨 2.安装必备软件及驱动新电脑安装360 1.系统优化 关掉底部菜单…

linux驱动开发入门(学习记录)

2023.7.6及7.7 概述了解 一 1.驱动框架 2. 字符设备 块设备,存储相关 网络设备驱动 不一定属于某一种类型二 1.获取外设或传感器数据,控制外设,数据会提交给应用程序 2.编写一个驱动,及测试应用程序 app。驱动和应用完全分开 3.驱…

程序员进阶之路:程序环境和预处理

目录 前言 程序的翻译环境和执行环境 翻译环境 运行环境 预处理(预编译) 预定义符号 #define #define 定义标识符 #define 定义宏 #define 替换规则 #和## #的作用 ##的作用 带副作用的宏参数 宏和函数对比 命名约定 #undef 命令行定义 条件…

通过v-for生成的input无法连续输入

部分代码&#xff1a;通过v-for循环生成el-form-item&#xff0c;生成多个描述输入框 更改之前的代码&#xff08;key绑定的是item&#xff09;&#xff1a; <el-form-item class"forminput" v-for"(item,index) in formdata.description" :key"…

【Linux -- 优先级 -- nice,renice 】

Linux – 优先级 – nice,renice 文章目录 Linux -- 优先级 -- nice,renice一、优先级1.Priority(PRI)2.nice(NI) 二、nice命令三、renice命令总结 一、优先级 CPU调度是指每个进程被CPU运行的规则,如果休眠的进程同时被唤醒,那CPU应该先处理哪个进程呢? 1.Priority(PRI) L…

Langchain 和 Chroma 的集成

Langchain 和 Chroma 的集成 1. Chroma2. 基本示例​3. 基本示例(包括保存到磁盘)4. 将 Chroma Client 传递到 Langchain ​5. 基本示例(使用 Docker 容器)6. 更新和删除7. 带分数的相似性搜索​ 1. Chroma Chroma 是一个人工智能原生开源矢量数据库&#xff0c;专注于开发人员…

Unity游戏源码分享-三国群英传

Unity游戏源码分享-三国群英传 完整版 工程地址&#xff1a;https://download.csdn.net/download/Highning0007/88069201

vue-element-template管理模板(二)

vue-element-admin框架 动态路由&#xff08;二&#xff09; 修改代码&#xff1a; import { asyncRoutes, constantRoutes } from "/router"; import { getMenu } from "/api/user"; import Layout from "/layout";/*** Use meta.role to det…

PCB 封装焊盘盖油了,什么原因?

PCB 封装焊盘盖油了&#xff0c;什么原因&#xff1f; 背景&#xff1a;当PCB切换到3D视图检查错误时&#xff0c;突然发现某个别芯片的封装管脚竟然是处于盖油状态&#xff0c;这肯定是个bug。制板厂家EQ&#xff0c;在审核生成稿时&#xff0c;也回打来电话确认“焊盘是否需…

python数据分析05—Pandas数据处理

目录 1.缺失数据处理 1.1 DataFrame自身产生的缺失数据 1.2 缺失数据判断和统计 ​1.3 缺失数据清理 2. 多源数据操作 2.1 合并函数&#xff1a;merge() 2.2 连接函数&#xff1a;join() 2.3 指定方向合并&#xff1a;concat() 3. 数据分组和聚合运算 3.1 groupby()方…

使用Nacos将单体服务注册成微服务的步骤以及相关问题解决

目录 1.改造单体服务的配置文件。 2.添加Nacosw相关的pom依赖 3.在nacos的配置列表中创建配置列表 4.相关问题的解决 1.改造单体服务的配置文件。 &#x1f516;创建一个bootstrap.yml的配置文件该文件通常放置在src/main/resources目录中&#xff0c;并且优先于applicati…

C语言学习笔记 码云及git使用教程-05

目录 一、码云简介 二、码云注册 1.点击右上角的注册按钮 2.填写相应的注册信息 3.使用账号密码进行登陆 三、创建仓库 1.如图新建 2.定义仓库相应参数 3.初始化readme文件 4.效果 5.开源设置 四、git管理 1.安装git 2.打开桌面上的Git bash 3.进行仓库克隆 4. 在其他盘…

信息与通信工程面试准备——专业知识提问

1.无线通信&#xff1a;依靠电磁波在空间传播以传输信息。 2.通信的目的&#xff1a;传输信息。 3.通信系统&#xff1a;将信息从信源发送到一个或多个目的地。 4.本书中通信一般指电信&#xff1a;利用电信号传输信息&#xff08;光通信属于电信&#xff0c;因为光也是一种…

Java中的队列

队列的理解 队列&#xff08;Queue&#xff09;是一种特殊的线性表&#xff0c;它只允许在表的前端进行删除操作&#xff0c;而在表的后端进行插入操作。 LinkedList类实现了Queue接口&#xff0c;因此我们可以把LinkedList当成Queue来用。 常用方法 实例 import java.util…

zabbix监控-钉钉webhook告警并使用markdown格式

zabbix监控-企业微信webhook告警并使用markdown格式 最终告警样式&#xff1a; markdown格式与text格式的优点&#xff1a;文字排版清晰&#xff0c;可对不同文字标识颜色&#xff0c;大小等。 此方法使用zabbix提供的webhook方式&#xff0c;不需要建立脚本文件。 zabbix版…

【人工智能】监督学习、分类问题、决策树、信息增益

文章目录 Decision Trees 决策树建立决策树分类模型的流程如何建立决策树?决策树学习表达能力决策树学习信息论在决策树学习中的应用特征选择准则一:信息增益举例结论不足回到餐厅的例子从12个例子中学到的决策树:Decision Trees 决策树 什么是决策树 —— 基本概念 非叶节…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 20 日论文合集)

文章目录 一、检测相关(7篇)1.1 Drone navigation and license place detection for vehicle location in indoor spaces1.2 BSDM: Background Suppression Diffusion Model for Hyperspectral Anomaly Detection1.3 Domain Adaptation for Enhanced Object Detection in Foggy…

STM32C0开发(2)----开发板介绍

基于RASC的keil电子时钟制作_配置keil以及使用串口进行打印 套件概述样品申请特征系统控制和生态系统访问功能示意图系统框图跳线设置开发板原理图 套件概述 STM32C011F4P6-TSSOP20评估套件可以使用户能够无缝评估TSSOP20封装中STM32C0S系列微控制器的功能&#xff0c;具备高效…

Java面试题总结记录(2)—— 多线程并发篇

1、Java实现多线程的方法 创建线程的常用方式 继承Thread类实现Runnable接口实现Callable接口线程池方式创建 说明&#xff1a; 通过继承 Thread 或 实现 Runnable接口&#xff0c;Callable接口都可以实现多线程&#xff0c;不过实现Runnable接口与实现Callable接口的方式基本…