实战开发:hbase行键设计及降低region热点的出现

HBase调优 —— rowkey设计的三大原则与热点问题的解决方案 在hbase中,rowkey的设计应该遵循三大原则 rowkey唯一原则 hbase中数据是以k-v格式存储的,rowkey可以类比为mysql里面的key值,因此在hbase的一张表里面,rowkey不应该重复。而且一个rowkey只能对应一条数据,用rowkey去get表里面的数据时,返回的应该是唯一一条对应的数据记录,不应该返回多条 另外,因为rowkey是按照字典顺序排序存储的,所以可以将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。不过这样做虽然方便了scan等范围查询数据,也可能会 阅读详情

在聊这个问题前,搞明白为什么要设计rowkey?(精心整理的说辞)

Hbase 分布式 列式 内存数据库。有着很高的读写性能。在olap即时分析越来越发挥重要的作用,HBase查询只能通过其Rowkey来查询(Rowkey用来表示唯一一行记录),Rowkey设计的优劣直接影响读写性能。
先谈几个原则:
1.(为什么)Rowkey的长度原则
Rowkey长度设计原则:Rowkey是一个二进制,Rowkey的长度被很多开发者建议说设计在10~100个字节,也有说不超过64k,建议是越短越好。
原因有两点:
其一是HBase的持久化文件HFile是按照KeyValue存储的,如果Rowkey过长比如500个字节,1000万列数据光Rowkey就要占用 500*1000万=50亿个字节,将近5G数据,这会极大影响HFile的存储效率
其二是MemStore缓存部分数据到内存,如果Rowkey字段过长内存的有效利用率会降低,系统无法缓存更多的数据,这会降低检索效率
需要指出的是不仅Rowkey的长度是越短越好,而且列族名、列名等尽量使用短名字,因为HBase属于列式数据库,这些名字都是会写入 到HBase的持久化文件HFile中去,过长的Rowkey、列族、列名都会导致整体的存储量成倍增加。

2.Rowkey的唯一原则(为什么)
必须在设计上保证其唯一性。由于在HBase中数据存储是Key-Value形式,若HBase中同一表插入相同Rowkey,则原先的数据会被覆盖 掉(如果表的version设置为1的话),所以务必保证Rowkey的唯一性。

3.Rowkey的散列原则 (为什么)
我们设计的Rowkey应均匀的分布在各个HBase节点上。拿常见的时间戳举例,假如Rowkey是按系统时间戳的方式递增,Rowkey的第一 部分如果是时间戳信息的话将造成所有新数据都在一个RegionServer上堆积的热点现象,也就是通常说的Region热点问题,热点发生在 大量的client直接访问集中在个别RegionServer上(访问可能是读,写或者其他操作),导致单个RegionServer机器自身负载过高,引起 性能下降甚至Region不可用,常见的是发生jvm full gc或者显示region too busy异常情况,当然这也会影响同一个RegionServer上的其 他Region。

通常有3种办法来解决这个Region热点问题:
ΩΩ1、Reverse反转
针对固定长度的Rowkey反转后存储,这样可以使Rowkey中经常改变的部分放在最前面,可以有效的随机Rowkey。 反转Rowkey的例子通常以手机举例,可以将手机号反转后的字符串作为Rowkey,这样的就避免了以手机号那样比较固定开头(137x、 15x等)导致热点问题, 这样做的缺点是牺牲了Rowkey的有序性。

ΩΩ2、Salt加盐 Salting是将每一个Rowkey加一个前缀,前缀使用一些随机字符,使得数据分散在多个不同的Region,达到Region负载均衡的目标
比如在一个有4个Region(注:以[ ,a)、[a,b)、[b,c)、[c, )为Region起至)的HBase表中, 加Salt前的Rowkey:abc001、abc002、abc003 我们分别加上a、b、c前缀,加Salt后Rowkey为:a-abc001、b-abc002、c-abc003 可以看到,加盐前的Rowkey默认会在第2个region中,加盐后的Rowkey数据会分布在3个region中,理论上处理后的吞吐量应是之前的 3倍。由于前缀是随机的,读这些数据时需要耗费更多的时间,所以Salt增加了写操作的吞吐量,不过缺点是同时增加了读操作的开销。

ΩΩ3、Hash散列或者Mod
md5,其实就是一种算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一
用Hash散列来替代随机Salt前缀的好处是能让一个给定的行有相同的前缀,这在分散了Region负载的同时,使读操作也能够推断。确定 性Hash(比如md5后取前4位做前缀)能让客户端重建完整的RowKey,可以使用get操作直接get想要的行。
例如将上述的原始Rowkey经过hash处理,此处我们采用md5散列算法取前4位做前缀,结果如下 9bf0-abc001 (abc001在md5后是9bf049097142c168c38a94c626eddf3d,取前4位是9bf0) 7006-abc002 95e6-abc003 若以前4个字符作为不同分区的起止,上面几个Rowkey数据会分布在3个region中。实际应用场景是当数据量越来越大的时候,这种设计 会使得分区之间更加均衡。 如果Rowkey是数字类型的,也可以考虑Mod方法。

实际开发我怎么设计的?
比如设计订单状态表时使用:
Rowkey: reverse(order_id) + (Long.MAX_VALUE – timestamp),这样设计的好处一是通过reverse订单号避免Region热点,
二是可以按时间倒 排显示。
如登录、下单等等统称事件(event))的临时存储(HBase只存 储了最近10分钟的热数据)
设计event事件的Rowkey为**:两位随机数Salt + eventId +Date + kafka的Offset**
设计加盐的目的是为了增加查询的并发性,假如Salt的范围是0~n,那我们在查询的时候,可以将数据分为n个split同时做scan操作。经 过我们的多次测试验证,增加并发度能够将整体的查询速度提升5~20倍以上。随后的eventId和Date是用来做范围Scan使用的。在我们
的查询场景中,大部分都是指定了eventId的,因此我们把eventId放在了第二个位置上,同时呢,eventId的取值有几十个,通过Salt + eventId的方式可以保证不会形成热点。在单机部署版本中,HBase会存储所有的event数据,所以我们把date放在rowkey的第三个位置 上以实现按date做scan,批量Scan性能甚至可以做到毫秒级返回。

HBase Region Region‌ 是 HBase 中数据存储与分布式管理的最小单元(换句话即:Region是HBase数据管理的基本单位),每个表按 ‌RowKey 范围‌ 水平划分为多个 Region,负责存储部分数据及处理读写请求。每个 Region 对应一个或多个列族(Column Family),内部由 ‌Store‌(存储列族数据)、‌MemStore‌(写缓存)和 ‌HFile‌(持久化文件)组成。维度‌建议‌RowKey设计‌ 结合业务特性设计散列前缀,避免单调递增导致热点预分区策略‌。 阅读详情

相关推荐

HBase(18):表空间设计之ROWKEY设计原则

因为ROWKEY我们是使用多个字段拼接,而且前缀不是完全随机的,所以需要使用HexStringSplit。long类型为8个字节,8个字节可以保存非常大的无符号整数,例如:18446744073709551615。如果是字符串,是按照一个字节一个字符方式保存,需要快3倍的字节数存储。如果ROWKEY设计的都是按照顺序递增(例如:时间戳),这样会有很多的数据写入时,负载都在一台机器上。在HBase中,可以通过指定start key、end key来进行分区,还可以直接指定Region的数量,指定分区的策略。

u013938578的博客 1041

HBase概念学习(八)开发一个类twitter系统之表设计

这边文章先将可能的需求分析一下,设计出HBase表,下一步再开始编写客户端代码。 TwiBase系统 1、背景 为了加深HBase基本概念的学习,参考HBase实战这本书实际动手做了这个例子。 2、需求 这是一个用户推特系统,用户登陆到系统,需要维护用户的基本信息,然后用户可以发帖和其他用户进行互动。用户之间可以相互关注,用户可以浏览关注用户的推文等等。 这是一个比

jiq•钦's technical Blog 3302

HBASE的rowkey设计原则

1.避免使用递增行键/时序数据 如果ROWKEY设计的都是按照顺序递增(例如:时间戳),这样会有很多的数据写入时,负载都在一台机器上。我们尽量应当将写入大压力均衡到各个RegionServer 2.避免ROWKEY和列的长度过长  在HBase中,要访问一个Cell(单元格),需要有ROWKEY、列蔟、列名,如果ROWKEY、列名太大,就会占用较大内存空间。所以ROWKEY和列的长度应该尽量短小  ROWKEY的最大长度是64KB,建议越短越好 3.使用Long等类型比String更省空间 long类型

科学的N次方 1329

HBase Rowkey设计原则

在做Rowkey设计时,请先考虑业务是读比写多、还是读比写少,HBase本身是为写优化的,即便是这样,也可能会出现热点问题,而如 果我们读比较多的话,除了考虑以上Rowkey设计原则外,还可以考虑HBase的Coprocessor甚至elastic search结合的方法,无论哪种方 式,都建议做实际业务场景下数据的压力测试以得到最优结果。

m0_66882197的博客 1149

HBase Region分裂机制深度解析

在分布式数据存储领域,HBase以其高可靠性、高性能和良好的水平扩展能力占据着重要地位。作为HBase核心架构的关键组成部分,Region分裂机制直接影响着集群的数据分布、负载均衡和整体性能。本文将带领读者深入探索HBase Region分裂的奥秘,从基础概念到底层原理,从触发机制到实现细节,从问题诊断到优化实践,全方位解析这一关键技术。无论你是HBase初学者还是有经验的开发者,本文都将为你提供宝贵的洞见,帮助你更好地理解和优化HBase集群性能,解决实际生产环境中遇到的各种挑战。

AI架构师小马 1059

超越数据手册:深入Zynq XADC的DRP接口与PL端自定义采样逻辑

本文深入探讨Zynq-7000系列XADC模块的DRP接口机制与PL端自定义采样逻辑实现。通过硬件级多通道轮询、触发采样和实时校准技术,突破传统软件驱动限制,为高精度电压测量和通讯应用提供极致灵活性和响应速度。

xxx12的博客 770

HBASE region简介

本文为网上资料整理和我自己的部分理解,图片设计数据安全均为网图,感谢各位大佬奉献

wmmain的博客 3494

vLLM 多机多卡推理测试与验证(Kubernetes)vLLM 多机多卡推理 Kubernetes 验证

本文记录在两台 L20 机器,每台机器 4 块 L20 显卡(46G)的环境下,使用 vLLM 部署 Qwen2.5-32B-Instruct-GPTQ-Int4 模型并提供多节点多卡推理服务的过程。服务(Serving)模型服务是指将模型部署到生产环境中,通过 API 或其他接口提供预测服务的过程。【分布式推理与服务】(Distributed Inference and Serving)是指在多个机器或设备之间部署和管理机器学习模型,以高效地处理推理请求并满足大规模服务需求。3、启动 vLLM 服务。

流水_鱼鱼的博客 3459

HBase Region原理总结归纳

HBase Region原理总结 1. 环境准备 基于Hadoop 3.2.1 基于zookeeper 3.4.6 基于Hbase 2.2.5 资料来源: 官网http://hbase.apache.org/2.2/book.html 网络博客、视频等资料 2.HBase数据存储概述 2.1 hbase概述 HBase是基于hdfs的一个数据库,也就是本身Hbase的数据存储在hdfs中。默认的,文件会分布式存储在hdfs节点中,并且按照128MB一块进行切分,并且会保存3份 hdfs中数据不适合

xiaohu21的博客 3019

基于ResNet-50的猫狗分类训练

基于ResNet-50的猫狗分类python训练

weixin_46352497的博客 1004

STM32 USB AUDIO实战指南——从零构建音频设备

本文详细介绍了如何使用STM32F407构建USB音频设备,从硬件准备到软件配置,再到音频播放和录制功能的实现。通过STM32CubeMX配置和实战代码示例,帮助开发者快速掌握USB Audio Class规范,实现低延迟、高质量的音频传输,适用于语音交互、音乐播放等多种场景。

weixin_42549037的博客 485

HBase的RegionServer热点

在HBase世界中,RegionServer热点是一个常见问题。我们可以用一个句子来描述这个问题:虽然使用顺序的行键写记录可以在给定开始键和停止键的情况下最有效地读取数据范围,但是这会在写入时引起不希望的RegionServer热点。 问题描述 HBase中的记录按行键按字典顺序排序。这允许通过其键快速访问单个记录,并通过给定开始键和停止键快速获取一系列数据。在某些常见情况下,您会认为在...

哈喽天方方 697

【教程】安装 iterm2 打造漂亮且高性能的 mac 终端

最近电脑重新安装系统,开发环境和软件都需要重新安装和配置,其中终端工具是必不可少的,正好利用这个机会,介绍一下 macOS 终端神器 iTerm2 的安装和配置,并推荐几款好用的插件和工具。在IT领域中,工具的选择和使用对于开发者和运维人员来说至关重要。而在众多终端模拟器中,ITerm2无疑是一个出色的选择,希望本篇的文章能对你有些帮助,感兴趣的朋友可以登录官网查看官方文档。我是刘大大,持续分享AI相关领域的知识和工具,喜欢点点关注。

刘大大AI的博客 3402

HBase 运维实战:Region 拆分与合并策略(解决查询延迟问题)

在HBase分布式数据库中,Region是数据存储的基本单元,其大小和分布直接影响查询性能。查询延迟问题往往源于Region过大(导致热点访问)或Region过多(增加管理开销)。通过优化Region拆分(Split)与合并(Merge)策略,可以有效提升系统吞吐和响应速度。以下我将逐步解析策略原理、实战配置和解决延迟问题的方法,确保内容基于真实运维经验。合并是当Region过小或空闲时整合的过程,以减少Region数量和元数据负担。拆分是当Region增长过大时自动或手动分割的过程,以分散负载。

saffadsa的博客 640

SOI技术实战:从晶圆结构到芯片性能提升的完整解析

本文深入解析SOI(Silicon on Insulator)技术如何通过独特的三明治晶圆结构提升芯片性能,涵盖从220nm SOI层设计到7nm节点的工艺挑战。详细探讨了埋氧层的绝缘优势、性能提升的物理机制,以及AMD处理器和5G射频中的实战应用,为半导体行业提供关键技术洞见。

wdx0123456的博客 962

SAP Joule Studio 全景解析

摘要:SAP Joule Studio是SAP Build平台中的低代码/专业级复合工作台,用于构建和管理企业专属的Joule智能体与技能。它支持通过拖拽和声明式编排实现跨系统任务自动化,与SAP及第三方系统集成。核心构件包括Agent(智能体)、Skill(技能)、Action(动作)和Project(项目)。Joule Studio强调企业级落地,与SAP Build Process Automation等工具协同,实现从设计到运行的全生命周期管理。典型应用场景包括供应链补货、财务关账和人力服务台自动化

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 399

HBase Region 简介和建议数量&大小

建议分配合理的region数量,根据写请求量的情况,一般20-200个之间,可以提高集群稳定性,排除很多不确定的因素,提升读写性能。所以,如果一个HRegion中Memstore过多,而且大部分都频繁写入数据,每次flush的开销必然会很大,因此我们也建议在进行表设计的时候尽量减少ColumnFamily的个数。如果很多region,它们中Memstore也过多,内存大小触发Region Server级别限制导致flush,就会对用户请求产生较大的影响,可能阻塞该Region Server上的更新操作。

h952520296的博客 5703

10分钟搞定小红书爆款笔记爬取!Selenium模拟登录+数据解析全流程,新手也能落地

小红书爬虫实战的核心,是**“模拟真人操作+解析结构化数据”**——Selenium解决了动态页面和登录的问题,lxml解决了数据提取的问题,pandas解决了数据存储的问题。新手学爬虫不用一开始就啃复杂的反爬机制,先从这类“可见即可爬”的场景入手,掌握“模拟操作→数据解析→数据保存”的全流程,再逐步叠加异常处理、批量爬取、反爬应对等功能。需要注意的是:爬取数据仅用于个人学习和研究,不得用于商业用途,且需遵守小红书的用户协议,不要过度爬取导致服务器压力。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1730

HBase集群管理与运维实战:深度解析扩缩容、Region迁移与滚动重启策略

在数据量持续爆发式增长的2025年,企业每天产生的数据量已突破百ZB级别,据Gartner最新报告显示,全球大数据市场规模较去年增长37%。在这样的背景下,HBase作为分布式列式数据库的领军者,其集群规模的动态调整能力已成为企业数据架构的核心竞争力。无论是应对618、双11这样的流量洪峰,还是处理日常业务的平稳运行,动态扩缩容都不再是“锦上添花”,而是“必不可少”的运维基本功。业务增长驱动的扩缩容需求。

zuiyuelong的博客 1282

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HBase Region分裂以及预分区

  HBase默认建表时有一个region,这个region的rowkey是没有边界的,即没有start key和end key,在数据写入时,所有数据都会写入这个默认的region,随着数据量的不断增加,此region已经不能承受不断增长的数据量,会进行split,分成2个region。在此过程中,会产生两个问题:【1】数据往一个region上写,会有写热点问题。【2】region split会...

ThreeAspects的博客 1245

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HBase的 rowkey 设计原则

hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储。 rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以 rowkey的设计是至关重要的,关系到你应用层的查询效率。 rowkey是以字典顺序排序的,存储的是字节码。 Rowkey设计原则 1.Rowkey的唯一原则 必须在设计上保证其唯一性。由于在HBas

zjjcchina的博客 3376

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HBase系列--HBase Region合并

1.为什么要合并region 这个需要从Region的Split来说。当一个Region被不断的写数据,达到Region的Split的阀值时(由属性hbase.hregion.max.filesize来决定,默认是10GB),该Region就会被Split成2个新的Region。随着业务数据量的不断增加,Region不断的执行Split,那么Region的个数也会越来越多。 一个业务表的Region越多,在进行读写操作时,或是对该表执行Compaction操作时,此时集群的压力是很大的。这里笔者做过一个线上

qq_32961283的博客 3061

HBase的数据热点和Hbase常见避免热点问题的方法

只要使用过,听说过HBase的人,我想对HBase的数据热点想必也不会陌生。 数据热点是如何出现的,这得从HBase的存储结构说起,对于HBase详细的存储结构可以上网搜一下,这里就不补充了。 我们只需要知道,我们的HBase的表会被划分为1个或多个Region,被托管在RegionServer中。 Region被托管在RegionServer中 由上图我们可以看出,Region有两个...

h952520296的博客 3406

HBase总结

HBase总结

qq_49096347的博客 1904

深入解析HBase的Region分裂机制:从基础架构到源码实现

HBase作为Apache Hadoop生态系统中的分布式列式数据库,其架构设计充分体现了分布式系统的高可用性和可扩展性特性。在2025年的技术环境下,HBase 3.x版本已成为主流,其核心架构依然保持着经典的三层设计,但在细节实现上有了显著优化。

zuiyuelong的博客 1240
上一篇: 集群规模、mysql与hbase区别
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值