巧用ChatGPT 解决 Hbase 快照方式读性能优化问题

简介: 巧用ChatGPT 解决 Hbase 快照方式读性能优化问题

一、背景

最近公司采用Hbase scan 的方式,经常性会遇到任务跑不出来region 读取超时,由于scan 全量数据,合计行数10个亿,列数接近500。根据建议方案,改为Hbase 快照读方式,避免给region 造成过大压力

二、Hbase 快照原理

snapshot流程主要涉及3个步骤:

1. 加一把全局锁,此时不允许任何的数据写入更新以及删除

2. 将Memstore中的缓存数据flush到文件中(可选)

3. 为所有HFile文件分别新建引用指针,这些指针元数据就是snapshot

三、实际线上表现

改为快照方式扫描之后,提交的任务半天提交不起来,接近1小时,任务才能启起来。

一般遇到程序卡住不动,会想到使用jstack 查看程序的堆栈信息

(1)查看程序的进程pid(top 命令或者ps -ef|grep 命令)

(2)找到程序的pid,打印jstack 信息

能看到程序一直卡在这个地方,一直计算block 信息,找到对应的Hbase 源码,查看对应的代码信息

可以看到是由于计算block location信息,那什么是location 呢?

利用chatGPT查询hbase locality的含义,能发现其实就是数据本地性,而我们实际任务中是不需要计算这个本地性占比,因为只需要能拉到数据即可,无论是从本地还是远端

HBase locality的原理可以分为两个方面,即数据本地性和任务本地性。
数据本地性
在HBase中,数据是以Region的形式存储的,一个Region包含了一段连续的行键范围。每个Region都会被分配到一个RegionServer上进行管理,并在该RegionServer上存储它所包含的所有数据。
当客户端访问HBase中的数据时,它会首先向HBase的Master节点请求获取对应数据所在的RegionServer的信息,然后再从该RegionServer上获取所需的数据。如果客户端所在的节点与该数据所在的RegionServer节点相同,就可以直接在该节点上获取数据,避免了网络传输的延迟,从而提高了数据访问的效率。
任务本地性
HBase中的任务包括数据写入和数据查询两种类型。在HBase中,数据写入是通过向表中的RegionServer发送写请求来完成的。如果客户端所在的节点与该RegionServer节点相同,那么写请求可以直接发送到该节点上,从而实现本地写入。
另一方面,数据查询任务是由HBase的RegionServer节点完成的。当RegionServer节点接收到查询请求时,它会首先检查所需数据所在的Region是否已经在该节点上加载到内存中,如果是,则可以直接在该节点上执行查询操作,否则需要从其他节点上获取数据,这将导致额外的网络延迟和资源开销。
因此,为了最大化任务本地性,HBase通常会将数据分布在多个Region中,并将这些Region分配到尽可能多的节点上进行管理,从而最大化数据和任务之间的本地性。此外,HBase还提供了一些机制来管理Region的负载均衡和RegionServer节点的故障转移,以保证系统的高可用性和稳定性。

最终只需要在提交任务的地方设置 hbase.TableSnapshotInputFormat.locality.enabled 为false 即可,任务提交就非常快了。

参考:

HBase原理 – 分布式系统中snapshot是怎么玩的? – 有态度的HBase/Spark/BigData


相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
存储 缓存 分布式数据库
HBase的性能优化有哪些方法?
HBase的性能优化有哪些方法?
73 0
|
存储 缓存 Java
技术篇-HBase 最佳实践-读性能优化策略
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题。HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是 HBase 还需要完善的,有些是我们确实对它了解太少。总结起来,大家遇到的主要问题无非是 Full GC 异常导致宕机问题、RIT 问题、写吞吐量太低以及读延迟较大。
2280 0
|
存储 缓存 Java
HBase最佳实践-读性能优化策略
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题。HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少。总结起来,大家遇到的主要问题无非是Full GC异常导致宕机问题、RIT问题、写吞吐量太低以及读延迟较大。
2081 0
|
缓存 分布式计算 Java
Hbase性能优化
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tomnic_ylwang/article/details/81105619 一、性能优化 1.
1617 0
|
存储 监控 分布式数据库
HBase学习笔记——基于HBase的日志系统的性能优化
我之前参与过一个日志系统的开发,存储用HBase。我简单罗列下用到的HBase优化,备忘。以后把它整理成更友好的介绍性文章。 # 系统简介 * 有一张大的日志数据表,保存所有日志。row key是 hash + app id + log-severity + timestamp + host等,cell保存日志正文数据。 * 可以看到row key的hash保证日志散列在各
1273 0
|
存储 监控 Java
Hbase万亿级存储性能优化总结
背景       hbase主集群在生产环境已稳定运行有1年半时间,最大的单表region数已达7200多个,每天新增入库量就有百亿条,对hbase的认识经历了懵懂到熟的过程。为了应对业务数据的压力,hbase入库也由最初的单机多线程升级为有容灾机制的分布式入库,为及早发现集群中的问题,还开发了一套对hbase集群服务和应用全面监控的报警系统。
2902 0
|
存储 算法 Java
HBase性能优化指南
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/51957401 垃圾回收...
1178 0