Hbase热点现象

浩客1年前技术文章680

热点现象

HBase热点现象是指在分布式存储系统HBase中,由于数据访问不均衡而导致部分Region Server负载过重的情况。这种不均衡通常是由于某些特定的数据行或列族频繁地被访问,从而导致某个或某些Region Server成为整个系统的瓶颈。

常见的热点现象包括“写热点”和“读热点”。写热点指的是某些特定的数据行或列族被持续高频率地写入,导致某个Region Server负责处理大量的写请求,而其他Region Server负载较轻。这会造成该Region Server的负载过重,容易引发延迟增加、写入速度下降等问题。读热点则是某些特定的数据行或列族被频繁地读取,导致某个Region Server成为大部分读请求的瓶颈,影响整个系统的读取性能。


热点现象出现的原因

1、数据倾斜:某些特定的数据行或列族被频繁地访问或写入,可能是由于业务需求、数据特性等因素导致。这会导致部分Region Server承载了大部分的读写负载,造成不均衡。

2、rowkey设计不合理。

3、热点发生在大量的client直接访问集群的一个或极少数个节点(访问可能是读,写或者其他操作)。大量访问会使热点region所在的单个机器超出自身承受能力,引起性能下降甚至region不可用,这也会影响同一个RegionServer上的其他region,由于主机无法服务其他region的请求。


热点现象解决办法

为了防止热点问题,对rowkey进行合理设计使得不同行在同一个region,但是在更多数据情况下,数据应该被写入集群的多个region。

1、加盐:在HBase中,可以使用加盐来增加数据的分布均匀性和查询性能。加盐的基本思想是在数据的行键(Rowkey)中添加随机生成的字符串或数字作为前缀,使得相似的行键被分散到不同的Region中存储。在rowkey的前面增加随机数,使得它和之前的rowkey的开头不同。分配的前缀种类数量应该和你想使用数据分散到不同的region的数量一致。

2、哈希:哈希可以使负载分散到整个集群,但是读却是可以预测的。使用确定的哈希可以让客户端重构完整的rowkey,可以使用get操作准确获取某一个行数据

3、反转:反转固定长度或者数字格式的rowkey。这样可以使得rowkey中经常改变的部分(最没有意义的部分)放在前面。这样可以有效的随机rowkey,但是牺牲了rowkey的有序性。

4、时间戳反转:一个常见的数据处理问题是快速获取数据的最近版本,使用反转的时间戳作为rowkey的一部分对这个问题十分有用,可以用 Long.Max_Value - timestamp 追加到key的末尾,例如[key][reverse_timestamp],[key]的最新值可以通过scan [key]获得[key]的第一条记录,因为HBase中rowkey是有序的,第一条记录是最后录入的数据。

5、HBase建表预分区:合理设计HBase数据表的预分区,通过制定好的分区策略将数据均匀地分布在不同的Region中。这样可以避免部分Region Server承载过多的负载,减轻热点现象的影响


相关文章

EMR yarn集成Cgroup

EMR yarn集成Cgroup

CGroups(Control Groups)是Linux内核的一个资源隔离功能,限制/隔离/统计进程的资源使用,包括CPU/内存/磁盘IO/网络等资源。YARN中也集成了CGroups的功能,使得N...

MySQL 小版本升级

MySQL 小版本升级

MySQL 版本一般不需要经常升级,如果需要使用某个新特性或者修改 BUG 就不得不升级小版本。1. 环境调研当前数据库版本和需要升级到某个版本,如果升级需求 5.6.22+ 那么我们直接下载 5.6...

netca报错UnsatisfiedLinkError exception loading native library

1、netca报错:UnsatisfiedLinkError exception loading native library: njni11报错:[oracle@test-db ~]$ netca...

大数据自动化巡检系统EasyCare使用简介

大数据自动化巡检系统EasyCare使用简介

1、EasyCare登录填写系统初始化用户密码之后登录系统,进入系统首页2、系统首页系统首页显示当前巡检的集群数量,巡检指标,巡检模版,当天巡检情况等3、配置管理配置管理菜单配置初始化巡检基础信息,包...

kubebuilder 开发operator初探

1、使用kubebuilder初始化$ mkdir project$ cd project$ kubebuilder init --domain tutorial.kubebuilder.io --r...

trino容器对接hudi(五)

trino容器对接hudi(五)

前提:本文是基于已经部署了trino容器的基础上进行的。冒烟测试是在trino对接ldap后并且ranger已经对接了metastore权限后,并且spark组件已经对接hudi,并且成功创建hudi...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。