HBase compact 总结 及 调优配置

关于Hbase手动实现Major Compact的办法 本人小菜,如有错误或疏漏之处,请各位大牛批评指正,求共同进步。发表此博文,旨在帮助遇到类似问题的朋友一点小的建议或思路。废话少说,开始吧。。。       最近,因项目需要。Hbase数据量很大,项目组提出需要对Hbase中目前所有表(当前有5个)进行major_compact操作。是按照需要,每天凌晨3点自动执行major_compact操作。             具体实现:     阅读详情


1 Compaction介绍

         在HBase中,每当memstore的数据flush到磁盘后,就形成一个storefile,当storefile的数量越来越大时,会严重影响HBase的读性能 ,所以必须将过多的storefile文件进行合并操作。Compaction是Buffer-flush-merge的LSM-Tree模型的关键操作,主要起到如下几个作用:

(1)合并文件

(2)清除删除、过期、多余版本的数据

(3)提高读写数据的效率

HBase中实现了两种compaction的方式:minor and major. Minor compactions will usually pick up a couple of the smaller adjacent StoreFiles and rewrite them as one. Minors do not drop deletes or expired cells, only major compactions do this. Sometimes a minor compaction will pick up all the StoreFiles in the Store and in this case it actually promotes itself to being a major compaction.

这两种compaction方式的区别是:

<1> Minor操作只用来做部分文件的合并操作以及包括minVersion=0并且设置ttl的过期版本清理,不做任何删除数据、多版本数据的清理工作。

<2>Major操作是对Region下的HStore下的所有StoreFile执行合并操作,最终的结果是整理合并出一个文件。

2 Compaction执行流程及核心算法

        在HBase实现中,通过CompactionChecker线程来定时检查是否需要执行compaction,同时每当RegionServer发生一次memstore flush操作之后也会进行检查是否需要进行compaction操作。具体的执行流程通过下面的章节进行展开。

2.1  Compaction执行流程

2.1.1  HRegionServer启动流程


        在regionserver的启动过程中,与compact相关的主要是在initializeThreads() 和 startServiceThreads()部分,在initializeThreads()中,主要是初始化了compact处理线程CompactSplitThread和compact检查线程CompactionChecker。线程CompactionChecker每隔10000秒检查一次是否需要进行Compact,当需要进行Compact的时候,CompactSplitThread开始处理每一个Compact请求。

2.1.2  CompactionChecker执行流程

        Compact检查线程每隔10000秒(可配置)开始检查当前Regionserver下的Region是否需要进行Compact,检查的过程是遍历每个Region,然后遍历该Region下的每个store,然后判断该store是否需要进行Compact,判断的标准是:

(storefiles.size() - filesCompacting.size()) > minFilesToCompact

即:当前store下storefile数量减去正在进行Compact的storefile的数量 大于 minFilesToCompact(可配置)值的时候 需要进行Compact,那么就开启一个CompactSplitThreads线程开始处理。如果上述判断失败,检查线程还会判断是否需要进行major_compact,如果需要,还要根据Compact的优先级开始不同优先级的CompactSplitThreads线程进行处理。

2.1.3  CompactSplitThread执行流程

        CompactSplitThread处理线程初始化两个线程池:largeCompactions和smallCompactions,这两个线程池的线程数目都是可以配置的。线程池初始化完毕之后,在一个store里选择需要Compact的storefile,选择完毕后封装成一个CompactRequest请求。在执行该请求之前,需要判断选择那个线程池进行处理,选择判断的方式是:

s.throttleCompaction(cr.getSize())? largeCompactions : smallCompactions

即:如果需要compact的storefile的size大于配置值的情况下选择largeCompactions线程,反之。在具体处理线程池选择完毕之后,开始执行Compact过程,pool.execute(cr),即一个CompactRequest请求是一个继承Runnable的类,他实现了run()方法,具体的执行流程在下一章节描述。

2.1.4  CompactionRequest 执行流程

         一个CompactRequest的处理过程是从r.compact()开始的,当一个Region的compact过程处理完毕之后,还需要判断是否需要迭代执行Compact,判断的条件是:

this.blockingStoreFileCount - this.storefiles.size()<=0

blockingStoreFileCount小于等于当前store下storefile的数量时,还需要继续进行compact,即需要将每个的store下的storefile的数量保持在blockingStoreFileCount(可配置)以下。

Region的compact函数最终调用的是store的compact函数,而每个store类都有一个compactor实例,Compactor类包含了compact算法的具体实现过程。

2.2  Compact File选择算法

(过程复杂,后期整理)

2.3  Compact 实现算法

(过程复杂,后期整理)

3 Compact参数调优

通过整理Hbase compact的流程,可以发现很多与compact相关的参数可以进行调整。具体参数如下所示:

参数名

含义

默认值

调优配置

hbase.hregion.majorcompaction

majorCompaction自动执行的时间间隔

86400000 s

0

hbase.hstore.compaction.min

(hbase.hstore.compactionThreshold)

触发compaction的参数

3

最大值

hbase.hstore.compaction.max

每次Compact合并文件数的上限

10

hbase.hstore.blockingStoreFiles

st在storefile数量的上限

7

最大值

hbase.hstore.blockingWaitTime

minor_compaction阻塞data update的时间上限值

9000   ms 

hbase.regionserver.thread.compaction.small

smallCompaction线程池的线程数

1

5

hbase.regionserver.thread.compaction.large

largeCompaction 线程池的线程数

1

5

hbase.hstore.compaction.kv.max

compaction过程中,每次从Hfile中读取kv的个数

10

不发生oom情况下,可以调大

hbase.hstore.compaction.min.size

选取Compaction文件时的参数值

memstore.flush.size

hbase.regionserver.thread.compaction.throttle

判断选择那个线程池

2 * minFilesToCompact * memstoreFlushSize

hbase.server.thread.wakefrequency

每隔一定时间检查是否需要进行compaction

10000s

为了减少compact,是否可以调高?

 

对于以上配置,都是与Compaction相关的参数,在保证读性能的前提下,需要优化上述配置,以尽量减少Compaction的发生,上述配置是完全禁止了compaction,然后在实际中以手动的或者定时的方式去执行compaction。


PS:  上述的配置关闭了minor compaction,一开始 线上写压力不大,所以在凌晨的major compact做完后, 积累的storefile数量一直不多,所以没有对读造成性能影响。 后来 , 线上集群写压力上升,每天下午4,5点的时候 每个region下都有 200-500的storefile积压,业务端出现了大量的读超时。因此minor compaction关闭是错的选择,

目前修改为:  hbase.hstore.compaction.min   10   ,   hbase.hstore.blockingStoreFiles  100;  即当一个region下storefile数量到10时,开始执行minor_compact,  如果写压力很大,以至于达到100个时, block一下写(停止blocking的条件:要么小于100,要么超过配置的block time).

MPU6050芯片 寄存器详解与配置指南(详解) 分频值越小,数据刷新越快(如分频值 = 0 时,刷新率 = 8kHz/1=8kHz)。功能:配置采样频率分频系数,控制 ADC 转换速度和数据刷新率。数据刷新率 = 陀螺仪输出时钟频率 /(1 + 分频值) 阅读详情

相关推荐

闲鱼客户端三重动态签名机制解析:x-sign、x-mini-wua与x-umt

在移动客户端安全通信中,设备级动态签名已成为主流App防范自动化攻击的核心手段。其原理是将设备指纹、运行时行为与可信硬件标识深度融合,生成不可复用、不可跨端、不可静态伪造的请求凭证。这类机制超越传统Token或Session鉴权,具备强上下文绑定性与实时熵值校验能力,广泛应用于电商、社交及开放平台等高风险接口场景。技术价值体现在有效识别模拟器、无头浏览器与集群化爬虫,同时保障多端一致性与合规数据对接。本文聚焦闲鱼客户端实际落地的x-sign(带设备上下文的混合签名)、x-mini-wua(小程序行为水印)与

weixin_35732273的博客 495

major_compact

一、major_compact的操作目的 (1)合并文件 (2)清除删除、过期、多余版本的数据 (3)提高读写数据的效率   HBase中实现了两种compaction的方式:minor and major. Minor compactions will usually pick up a couple of the smaller adjacent StoreFiles and rew...

mnasd的博客 7979

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3789

HBASE手动触发major_compact

定时器执行脚本: #!/bin/bash source /etc/profile sh ./hbase shell <<EOF major_compact 'table_name' EOF major_compact语法: 语法: #Compact all regions in a table: hbase> major_compact 't1' #Comp...

bigdata_player 4964

MediaPipe+Unity动作捕捉实战:如何用普通摄像头驱动3D人物模型(附避坑指南)

本文详细介绍了如何利用MediaPipe和Unity实现低成本动作捕捉,仅需普通摄像头即可驱动3D人物模型。通过MediaPipe的3D坐标预测能力,结合Unity的骨骼映射优化,解决单目摄像头下的三维重建难题,并提供实战避坑指南和性能优化技巧,帮助开发者快速实现专业级的人物模型驱动效果。

weixin_29047545的博客 359

手把手教你用STM32F030实现功率MOS双脉冲测试(附完整电路图)

本文详细介绍了如何使用STM32F030微控制器搭建功率MOSFET双脉冲测试平台。通过分析双脉冲测试原理,提供了完整的硬件电路设计、驱动电路选型、软件时序生成方法,并指导如何利用示波器捕获和分析开关波形,从而评估功率器件的动态特性与开关损耗。

juice的博客 713

HBase compaction了解和手动触发major_compaction方法

Major Compaction 的作用: 1.将一个Region下的所有StoreFile合并成一个StoreFile文件 2.对于删除、过期、多余版本的数据进行清除 3.提高读写数据的效率 HBase中实现了两种compaction的方式: 1.Minor compaction:只用来做部分文件的合并操作以及包括minVersion=0并且设置ttl的过期版本清理,不做任何删除数据、多版本数据的清理工作。 2.Major compaction:是对Region下的HStore的所有StoreFile执行

c18092694487t的博客 7315

基于YOLOv5的仪表读数识别系统:从检测到识别的完整解决方案

随着工业自动化水平的不断提高,仪表读数识别技术在电力系统、石油化工、智能制造等领域发挥着越来越重要的作用。本文提出了一种基于YOLOv5的仪表自动读数识别系统,该系统能够有效区分指针式和数字式仪表,并实现高精度的读数识别。我们详细介绍了系统的整体架构、数据集构建、模型训练策略以及用户界面设计,并提供了完整的代码实现。实验结果表明,本系统在仪表检测和读数识别任务上均取得了优异的表现,为工业现场的自动化监控提供了可靠的技术支持。关键词:仪表读数识别;YOLOv5;目标检测;深度学习;工业自动化。

YOLO 678

Hbase的MinorCompact过程解析及参数调优

在Memstore超过一定的阈值的时候,就要新开一个进程将Memstore flush到storefile中,新的Memstore继续写入接受到的数据,当storefile越来越多时,就会降低读的性能,为了提高读的性能,可以对这些storefile进行compact操作,形多个storefile合并成一个大的storefile,那么compact就需要对HBase的数据进行多次的重新读写,这将产生大量的IO操作,所以Minor操作只用来做部分文件的合并操作以及包括minVersion=0并且设置ttl的过期

南风知我意 1870

Plecs电力电子仿真专业教程-第一季 第一节 Plecs简介

Plces 电力电子仿真专业教程系列依托专业的电力电子仿真软件Plecs对各种电力电子常用的拓扑及实际设计的方案进行系统及仿真与软件代码仿真实践。通过对各种电路仿真原理的讲解及专业C语言代码程序的编写,提升学员的系统设计能力,软件编程能力与理论分析能力。

3644

【AI应用实战-OpenCode】OpenCode安装部署(一)

OpenCode是一款2026年流行的开源AI编程工具,兼具轻量代码编辑器和智能编码代理功能。其核心优势包括:完全免费开源(MIT协议)、全平台兼容、支持75+大模型(含本地部署)、内置完整编程功能链(代码补全/Git集成/AI调试等),且所有数据本地存储确保隐私安全。相比Copilot等商业工具,OpenCode提供更自由的模型选择和零门槛使用体验。安装要求Windows10+/macOS12+/Linux主流发行版,仅需200MB空间和4G内存。该工具完美兼容VSCode生态,支持终端/桌面/IDE三种

2430

34、木材在家具制造中的应用

本文详细探讨了木材在家具制造中的应用,从木材的选择、加工技术到设计创新和表面处理等方面进行了全面解析,并结合实际案例分析木材家具的市场趋势与未来发展。文章强调了木材家具在功能性、智能化和环保性方面的潜力,展示了其在现代家居生活中的重要地位。

flink9streamer的博客 242

HBase的几种调优(GC策略,flush,compact,split)

一:GC的调优 1.jvm的内存   新生代:存活时间较短,一般存储刚生成的一些对象   老年代:存活时间较长,主要存储在应用程序中生命周期较长的对象   永久代:一般存储meta和class的信息   2.GC策略   Parrallel New Collector,垃圾回收策略   并行标记回收器(Concurrent Mark-Sweep Collector)   3.Par...

徐雄辉笔记 1024

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

hbase重要调优(GC策略,flush,compact,split)

一:GC的调优 1.jvm的内存   新生代:存活时间较短,一般存储刚生成的一些对象   老年代:存活时间较长,主要存储在应用程序中生命周期较长的对象   永久代:一般存储meta和class的信息   2.GC策略   Parrallel New Collector,垃圾回收策略   并行标记回收器(Concurrent Mark-Sweep Coll...

文武傲群雄,彳亍定江山 299

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

HBase第五天——HBase三个重要机制

HBase第五天——HBase 三个重要机制 自己的话:我愿平东海,身沉心不改; 大海无平期,我心无绝时。 HBase的数据flush、compact、split机制 一、数据 flush 过程(flush) 当 MemStore 数据达到阈值(默认是 128M,老版本是 64M),将数据刷到硬盘,将内存中的数据删除,同时删除 HLog 中的历史数据; 并将数据存储到 HDFS 中; ...

你怎么回事 411

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【HBase】HBase入门详解(五)

(图片来源于网络,侵删) 一、Master、RegionServer的上下线以及Region的管理 Master上线 1) 从Zookeeper上获取唯一一个代表Active Master的锁,用来阻止其他Master成为真正的Master 2) 扫描Zookeeper上的/hbase/rs节点,获取当前可用的Region server列表 3) 和每个RegionServer通信,获得当...

Together 4441

HBase集群参数配置优化

1.compact 我们首先假设一个现象:当写请求非常多,导致不断生成HFile,但compact的速度远远跟不上HFile生成的速度,这样就会使HFile的数量会越来越多,导致读性能急剧下降。为了避免这种情况,在HFile的数量过多的时候会限制写请求的速度:在每次执行MemStore flush的操作前,如果HStore的HFile数超过hbase.hstore.blockingStoreFi...

山间浓雾有路灯的博客 568

HBase性能优化与高可用配置

HBase高可用配置与性能优化摘要 HBase高可用配置通过Zookeeper实现HMaster自动选举,需在backup-masters中指定备用节点。预分区策略可避免单Region热点问题,建议基于数据特征设计10-50个初始Region。 RowKey设计是性能关键,应采用哈希前缀、字符串反转等技术实现数据均匀分布,同时兼顾查询效率。建议长度10-100字节,避免单调递增。

记录学习点滴,分享实战干货,一起奔赴技术之路 259

HBase写入性能及改造——multi-thread flush and compaction(续:详细测试数据)[转]

转载:http://blog.youkuaiyun.com/kalaamong/article/details/7290192 接上文啊: 测试机性能 CPU 16*Intel(R) Xeon(R) CPU E5620 @ 2.40GHz MEMORY 48GB DISK 12*SATA 2TB NET 4*1GbEthernet...

dianzhouyu2189的博客 152

HBase Shell高效使用技巧:这些隐藏命令能让你的大数据操作快人一步

本文深入探讨HBase Shell的高效使用技巧,揭示批量操作、模式修改和高级查询等隐藏命令,显著提升大数据处理效率。通过优化scan缓存、预分区创建表和精准控制扫描范围等技巧,帮助开发者快速掌握HBase Shell的高级功能,实现数据操作的速度飞跃。

weixin_29309213的博客 198
上一篇: HBase compact 总结 及 调优配置
下一篇: 写好Hive程序的5个提示 (转载just for study later...)
mt0803
博客等级 码龄19年 21粉丝 21原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值