高阶面试-hbase的整理

背景

冷热分离需要用到hbase,冷数据较多,需求:

  1. 存放上亿数据
  2. 支持简单的组合关键字查询
  3. 存放数据不需要变更

基本存储数据结构

HBase可以被看作是一个稀疏的多维度Map(映射),稀疏的、分布式、多维的Map,将行键(Row Key)、列族(Column Family)、列限定符(Column Qualifier)和时间戳(Timestamp)映射到一个值(Value)

数据模型

如下数据如何存储?表users,包含两个列族personal_infocontact_info

![[Pasted image 20240612235231.png]]

实际存储结构:

Row Key: user1Column Family: personal_infoColumn Qualifier: name -> Value: AliceColumn Qualifier: age -> Value: 30Column Family: contact_infoColumn Qualifier: email -> Value: alice@example.comColumn Qualifier: phone -> Value: 123-456-7890Row Key: user2Column Family: personal_infoColumn Qualifier: name -> Value: BobColumn Qualifier: age -> Value: 25Column Family: contact_infoColumn Qualifier: email -> Value: bob@example.comColumn Qualifier: phone -> Value: 987-654-3210

每一个RowKey、TimeStamp以及Key-Value值就是一个Cell

  • 行键 (Row Key): 唯一标识每一行数据,例如user1user2
  • 列族 (Column Family): 数据按列族进行物理存储,例如personal_infocontact_info
  • 列限定符 (Column Qualifier): 列族下的具体列,例如nameageemailphone
  • 时间戳 (Timestamp): 记录数据的版本,HBase支持多个版本的值,默认为服务器写入数据的时间。
  • 值 (Value): 存储的实际数据,例如Alice30alice@example.com

ColumnFamily一开始就要定义好,类似于关系型数据库里面的列,属于schema,每个ColumnFamily可以灵活增加ColumnQualifier,ColumnQualifier不需要在创建表的时候定义

物理存储模型

根据RowKey的范围划分成多个Region

  1. 一个表会被水平切割成多个Region
  2. 一个Region会包含多个Row,包含startkey和endkey之间所有连续的行。每个Region的大小默认会控制在1GB内。每个表一开始只有二个 Region,随着数据不断插入到表中,Region 不断增大,当增大到一个阈值的时候,Region 就会等分为两个新的 Region
  3. 每个Region包含着多个Store对象。每个Store包含一个MemStore或若干StoreFile,StoreFile包含一个或多个HFile。MemStore存放在内存中,StoreFile存储在HDFS上
  4. 一个MemStore会存储一个ColumnFamily,一个MemStore会把数据写入多个HFile
  5. 一个RegionServer会服务多个Region

![[Pasted image 20240613081011.png]]

Table: usersRegion 1 (RowKey: user1 - user1000)|-- Store (Column Family: personal_info)|    |-- MemStore|    |-- HFile||-- Store (Column Family: contact_info)|-- MemStore|-- HFileRegion 2 (RowKey: user1001 - user2000)|-- Store (Column Family: personal_info)|    |-- MemStore|    |-- HFile||-- Store (Column Family: contact_info)|-- MemStore|-- HFile

分布式环境

Master 主要负责表 Region 的管理工作,包括分配 Region 给 Region Server,协调多个 Region Server,检测各个 Region Server 的状态,并平衡 Region Server 之间的负载。

Region Server 是 HBase 最核心的模块,包含多个 Region,负责维护 Master 分配给它的 Region 集合,并处理对这些 Region 的读写操作,Client 直接与 Region Server 连接,并经过通信获取 HBase 中的数据。Region Server 需要向 HDFS 写入数据。

Zookeeper 作用:

  1. 是 HBase Master 的高可用性(High Available,HA)解决方案,保证了至少有一个 HBase Master 处于运行状态。
  2. 负责 Region 和 Region Server 的注册,Master 就可以通过 Zookeeper 随时感知各个 Region Server 的工作状态

![[Pasted image 20240613081021.png]]

数据写入流程

  1. 写请求:客户端向HBase发送写请求。
  2. 具体client访问zk读取元数据,根据namespace、表名、rowkey找到数据对应region,访问region对应regionServer
  3. 写入WAL:数据首先写入WAL(WriteAheadLog),以确保数据不会因为RegionServer故障而丢失,每个regionServer都会维护一个WAL文件(也是基于HDFS),所有写操作现将变动添加到WAL文件末尾。
  4. 写入MemStore:数据被写入MemStore,当MemStore达到一定大小时,会触发一次flush操作。
  5. Flush到HFile:MemStore的数据被写入HFile,存储在HDFS上。
  6. Compaction:随着时间推移,HBase会执行合并操作(Compaction),将多个小的HFile合并成一个大的HFile,以提高读性能。

数据读取流程

  1. 查找MemStore:首先在MemStore中查找数据。
  2. 查找BlockCache:如果数据不在MemStore中,接下来在BlockCache中查找。
  3. 查找HFile:如果数据既不在MemStore也不在BlockCache中,则查找HFile。
  4. 返回数据:找到数据后,返回给客户端。如果在HFile中找到数据,则将数据块缓存到BlockCache中,以加快后续的读取操作

HFile的结构

数据块(Data Block)

- 存储实际的数据,包含多个KeyValue对。
- 每个数据块都可以进行压缩,以减少存储空间和提高读写效率。
  • 索引块(Index Block)

    • 存储数据块的索引信息,用于加快数据查找。
    • HFile包含一个元索引块(Meta Index Block),指向索引块的位置。
  • 元数据块(Meta Block)

    • 存储额外的元数据信息,例如文件信息、统计信息等
HDFS
├── DataNode 1
│   ├── /hbase/data/default/users/region1/store1/hfile1
│   ├── /hbase/data/default/users/region1/store2/hfile2
│   └── ...
├── DataNode 2
│   ├── /hbase/data/default/users/region2/store1/hfile3
│   ├── /hbase/data/default/users/region2/store2/hfile4
│   └── ...
├── DataNode 3
│   ├── /hbase/data/default/users/region3/store1/hfile5
│   ├── /hbase/data/default/users/region3/store2/hfile6
│   └── ...
└── ...HFile:├── Data Block 1│   ├── KeyValue1│   ├── KeyValue2│   └── ...├── Data Block 2│   ├── KeyValue3│   ├── KeyValue4│   └── ...├── ...├── Index Block│   ├── Index Entry 1│   ├── Index Entry 2│   └── ...└── Meta Block├── Meta Entry 1├── Meta Entry 2└── ...

表结构的设计

rowkey设计:
md5[cumstomeremail]+ticketId

columnFamily: ColumnFamily:i
为什么只整一个?
因为官方不推荐两个以上的columnFamily,原因:memstore刷新到HFile的动作叫flushing,flushing的操作是region级别,也就是只要有一个columnFamily满了就需要刷新,可能另外一个还很空,增加不必要的IO操作
ColumnKey: 剩余字段都设为i列簇下的Key
![[Pasted image 20240614080719.png]]

工单处理记录表,将处理记录转为json,保存在一个columnKey中

参考

https://www.cnblogs.com/zkteam/p/11877286.html

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

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

相关文章

使用 mongo2neo4j 和 SemSpect 通过各种方式进行图探索

用于可视化和探索每个 MEAN 堆栈背后的数据图的 ETL 您是否正在努力回答有关 MEANS Web 服务数据的紧急问题?哪里有 BI 可以快速回答“上个季度哪些亚洲的artisan.plus 用户触发了订单?”这个问题,而无需编写查询?使用 mongo2neo4…

深度学习每周学习总结N3(文本分类实战:基本分类(熟悉流程)、textCNN分类(通用模型)、Bert分类(模型进阶))

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 0. 总结:1. 前期准备环境安装 2. 文本分类基本流程a. 加载数据b.构建词典c.生成数据批次和迭代器d.定义模型及实例e. 定义…

Linux搭建hive手册

一、将hive安装包上传到NameNode节点并解压 1、删除安装MySQL时的.rpm文件 cd /opt/install_packages/ rm -rf *.rpm 2、将安装包拖进/install_packages目录 3、解压安装包 tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/softs/ 4、修改包名 cd /opt/softs mv apache-…

力扣双指针算法题目:复写零

1.题目 . - 力扣(LeetCode) 2.解题思路 本题要求就是对于一个数组顺序表,将表中的所有“0”元素都向后再写一遍,且我们还要保证此元素之后的元素不受到影响,且复写零之后此数组顺序表的总长度不可以改变,…

OpenCV 灰度直方图及熵的计算

目录 一、概述 1.1灰度直方图 1.1.1灰度直方图的原理 1.1.2灰度直方图的应用 1.1.3直方图的评判标准 1.2熵 二、代码实现 三、实现效果 3.1直方图显示 3.2 熵的计算 一、概述 OpenCV中的灰度直方图是一个关键的工具,用于分析和理解图像的灰度分布情况。直…

ubuntu 网络常用命令

在Ubuntu中,管理和诊断网络问题时会用到一些常用的命令行工具。以下是一些Ubuntu网络常用的命令: ifconfig (已被ip命令替代,但仍在许多系统中可用): 显示或配置网络接口信息。示例:ifconfig 显示所有网络接口信息。ip: 一个多功…

12 Dockerfile详解

目录 1. Dockerfile 2. Dockerfile构建过程 2.1. Dockerfile编写规则: 2.2. Docker执行Dockerfile的大致流程 2.3. 总结 3. Dockerfile指令 3.1. FROM 3.2. MAINTAINER 3.3. RUN 3.4. EXPOSE 3.5. WORKDIR 3.6. USER 3.7. ENV 3.8. VOLUME 3.9. ADD …

mac 11 变编译安装nginx

mac 11 变编译安装nginx 记录一次安装过程 所需要的包 pcre: https://sourceforge.net/projects/pcre/files/pcre/OpenSSL: https://www.openssl.org/source/Nginx: https://nginx.org/en/download.html如果没有pcre 和Openssl,报错如下 把pcre和Openssl 解压到nginx 目录下…

libiw中的函数说明

打开电脑连接wifi是一件很平常的事情,但这些事情通常都是操作系统下的wifi管理程序替我们完成的,如何在程序中连接指定的wifi其实很少有资料介绍,在网络专栏的文章中,有两篇是关于wfi编程的文章,其中对无线网卡的操作都是通过ioctl()完成的,显得有些繁琐和晦涩,但其实WE…

Stable Diffusion与AI艺术:探索人工智能的创造力

引言 随着人工智能(AI)技术的迅猛发展,AI艺术逐渐走进了公众视野。尤其是近年来,Stable Diffusion等技术的出现,显著提升了AI在艺术创作领域的表现力和创造力。这篇文章将深入探讨Stable Diffusion技术的工作原理、应…

Linux高并发服务器开发(十三)Web服务器开发

文章目录 1 使用的知识点2 http请求get 和 post的区别 3 整体功能介绍4 基于epoll的web服务器开发流程5 服务器代码6 libevent版本的本地web服务器 1 使用的知识点 2 http请求 get 和 post的区别 http协议请求报文格式: 1 请求行 GET /test.txt HTTP/1.1 2 请求行 健值对 3 空…

成长-项目管理

小感悟 制定共同的目标,需要大家都知道, 心里有底。不能高压管理, 需要允许灰色地带的存在。雁行里面,带好领头,表现好的及时表扬,鼓励,正面反馈有利于团队向前飞 方法论 5why分析法 又称“5…

第一次的pentest show总结

第一次的pentest show总结 前言 开始之前,我特别感谢TryHackMe(英)、HackTheBox(美)、zero-point security(英)、offsec(美)等平台,使我们能够通过网络以线上的方式学习与练习,打破传统线下各地区教育资源差异大的限制,对网络教…

【代码随想录算法训练营第37期 第四十三天 | LeetCode518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯】

代码随想录算法训练营第37期 第四十三天 | LeetCode518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯 一、518. 零钱兑换 II 解题代码C&#xff1a; class Solution { public:int change(int amount, vector<int>& coins) {vector<int> dp(amount 1, 0);dp[…

03:EDA的进阶使用

使用EDA设计一个38译码器电路和245放大电路 1、38译码器1.1、查看74HC138芯片数据1.2、电路设计 2、245放大电路2.1、查看数据手册2.2、设计电路 3、绘制PCB3.1、导入3.2、放置3.3、飞线3.4、特殊方式连接GND3.5、泪滴3.6、配置丝印和划分区域3.7、添加typc接口供电 1、38译码器…

20.5.【C语言】求长度的两种方式

1.sizeof 用于测数据类型的长度的函数&#xff08;详细见第3篇&#xff09; 2.strlen 其计算长度时只有遇到\0才会停止&#xff0c;并且\0不会计算在内 如char arr[]{a,1,b}; printf("%d\n",strlen(arr)); 结果是个随机数&#xff01;strlen读内存中的数据&…

Android SurfaceFlinger——Surface和Layer介绍(十九)

按照前面系统开机动画的流程继续分析,在获取到显示屏信息后,下一步就是开始创建 Surface和设置 Layer 层级,这里就出现了两个新的概念——Surface 和 Layer。 一、基本概念 1、Surface介绍 在 Android 系统中,Surface 是一个非常核心的概念,它是用于显示图像的生产者-消…

快递物流运输中的RFID智能锁控应用方案

一、物流货运管理的痛点分析 1.1 货物安全与监控难题 物流货运过程中&#xff0c;货物安全是首要关注的问题。传统的锁控方式存在诸多不足&#xff0c;例如易被撬锁、监控盲点以及难以实时追踪货物状态。据统计&#xff0c;每年因货物丢失或损坏导致的经济损失高达数十亿美元…

小白也可以部署私有化大模型知识库_私有化知识库

透过产品了解RAG技术原理&#xff0c;对未来大模型应用开发也将起到事半功倍的效果。 虽然网络上有很多此类技术文章&#xff0c;这里自己也进行一次总结&#xff0c;加深印象的同时给小伙伴做一个参考&#xff0c;多多交流。 准备 Linux服务器、windows也可以 Docker环境&…

Excel多表格合并

我这里一共有25张表格: 所有表的表头和格式都一样,但是内容不一样: 现在我要做的是把所有表格的内容合并到一起,研究了一下发现WPS的这项功能要开会员的,本来想用代码撸出来的,但是后来想想还是找其他办法,后来找到"易用宝"这个插件,这个插件可以从如下地址下载:ht…