HBase原理 | HBase Compaction介绍与参数调优

2024-06-12 21:48

本文主要是介绍HBase原理 | HBase Compaction介绍与参数调优,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们知道,数据达到HBase服务端会写WAL-写Memstore,然后定期或满足一定条件时刷写磁盘生成一个HFile文件,随着时间推移生成的HFile会越来越多,将会影响HBase查询性能,同时会对HDFS造成一定影响。因此HBase会定期执行Compaction操作以合并减少HFile数量。

1.两种合并

HBase中Compaction分为两种。Minor Compaction称为小合并,主要是选取一些小的、相邻的HFile将他们合并成较大的HFile,并删除HFile中的过期数据。

Major Compaction称为大合并,会将一个列族下的所有HFile合并成一个大的HFile,同时删除过期数据、已删除数据(打了Delete标记的)、版本过大的数据等三类无效数据。

2. 参数调优

1).hbase.hstore.compaction.min

默认值 3,一个列族下的HFile数量超过该值就会触发Minor Compaction,这个参数默认值小了,一般情况下建议调大到5~10之间,注意相应调整下一个参数。(旧版本中该参数是hbase.hstore.compactionthreshold)

2).hbase.hstore.compaction.max

默认值 10,一次Minor Compaction最多合并的HFile文件数量,这个参数基本控制着一次压缩即Compaction的耗时。这个参数要比上一个参数hbase.hstore.compaction.min值大,通常是其2~3倍。

3).hbase.regionserver.thread.compaction.throttle

HBase RS内部设计了两个线程池:large compactions与small compactions,用来分开处理Compaction操作,这个参数就是控制一个Compaction应该交由哪一个线程池处理,默认值2 * hbase.hstore.compaction.max * hbase.hregion.memstore.flush.size,即2*10*128M=2.5G,如果待合并文件的总大小大于该值则交给large compactions线程池处理,否则交给small compactions线程池处理。一般建议不调整或稍微调大。

4).hbase.regionserver.thread.compaction.small

默认值 1,RS中small compactions线程池的大小。一般建议调整到2~5,不建议调太大,否则可能会消费过多的服务端资源得不偿失。

5).hbase.regionserver.thread.compaction.large

默认值 1,RS中large compactions线程池的大小。调整建议同上。

6).hbase.hstore.blockingStoreFiles

默认值 10,一个列族下HFile数量达到该值就会阻塞写入,等待Compaction完成。生产环境中默认值太小了,一般建议设置大点比如100,避免出现阻塞更新的情况。

7).hbase.hregion.majorcompaction

默认值 604800000,就是7天,这是Major Compaction周期性触发的时间间隔。因为通常Major Compaction持续时间长、资源消耗大,建议关闭HBase Major Compaction,参数设为0,并在业务低峰期手动执行。

往期推荐

1、Hudi原理 | Apache Hudi 典型应用场景介绍

2、HBase实践 | HBase内核优化与吞吐能力建设

3、Hadoop社区比 Ozone 更重要的事情

4、Hive on Spark 运行于Yarn模式下如何调优

这篇关于HBase原理 | HBase Compaction介绍与参数调优的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055430

相关文章

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R