`
mt0803
  • 浏览: 4374 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

HBase compact 总结 及 调优配置

 
阅读更多


1Compaction介绍

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

(1)合并文件

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

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

HBase中实现了两种compaction的方式:minorandmajor.MinorcompactionswillusuallypickupacoupleofthesmalleradjacentStoreFilesandrewritethemasone.Minorsdonotdropdeletesorexpiredcells,onlymajorcompactionsdothis.SometimesaminorcompactionwillpickupalltheStoreFilesintheStoreandinthiscaseitactuallypromotesitselftobeingamajorcompaction.

这两种compaction方式的区别是:

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

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

2Compaction执行流程及核心算法

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

2.1Compaction执行流程

2.1.1HRegionServer启动流程


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

2.1.2CompactionChecker执行流程

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

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

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

2.1.3CompactSplitThread执行流程

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

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

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

2.1.4CompactionRequest执行流程

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

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

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

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

2.2CompactFile选择算法

(过程复杂,后期整理)

2.3Compact实现算法

(过程复杂,后期整理)

3Compact参数调优

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

参数名

含义

默认值

调优配置

hbase.hregion.majorcompaction

majorCompaction自动执行的时间间隔

86400000s

0

hbase.hstore.compaction.min

(hbase.hstore.compactionThreshold)

触发compaction的参数

3

最大值

hbase.hstore.compaction.max

每次Compact合并文件数的上限

10

hbase.hstore.blockingStoreFiles

ststorefile数量的上限

7

最大值

hbase.hstore.blockingWaitTime

minor_compaction阻塞dataupdate的时间上限值

9000ms

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。

分享到:
评论

相关推荐

    大数据开发之案例实践Hbase的设计及企业优化视频教程(视频+讲义+笔记+配置+代码+练习)

    │ Hbase性能优化-GC调优 │ Hbase性能优化-内存管理 │ Hbase性能优化-flush、compact、split │ Hbase性能优化-配置snappy压缩 │ Hbase中索引的介绍 │ PHoenix的编译及安装部署 │ PHoenix与Hbase表的关联使用 ...

    hbase性能调优

    总结,HBase性能调优是一项综合性的任务,涉及JVM配置、数据压缩策略、region管理等多个方面。理解这些关键点并根据实际应用场景进行优化,能够显著提高HBase系统的整体性能和稳定性。在实际操作中,还需要不断监控...

    hadoop、habse、yarn、MapReduce调优等总结的集合调优.docx

    这篇文章是对Hadoop、HBase、YARN以及MapReduce进行调优的综合总结,涵盖了自动部署、配置管理、监控管理和服务监控等多个方面。首先,我们来看看Hadoop调优的关键点。 在Hadoop调优中,主要涉及到的核心配置文件...

    Hbase性能测试详细设计文档及用例.pdf

    总的来说,HBase性能测试和调优是一个涉及多方面、多层次的过程,包括表设计、数据管理策略、Row Key设计以及HTable参数配置等。理解并灵活运用这些知识,能够有效地提升HBase在大规模数据处理中的性能表现。

    hbase基本概念和hbase shell常用命令用法

    **HBase基本概念** HBase,全称是Apache HBase,是一个分布式的、面向列的...同时,HBase与其他大数据组件(如Hadoop MapReduce、Hive、Spark等)的集成也是日常工作中经常遇到的问题,需要熟练掌握相关接口和配置。

    HBase伪分布式安装及简单使用.pdf

    《HBase 伪分布式安装与基础使用》 HBase,作为Hadoop生态系统的一部分,是一款针对大规模数据实时读写的NoSQL数据库。它以分布式、多版本、面向...在实际应用中,需要根据业务需求和性能优化进行更深入的配置和调优。

    初始化pinpoint库

    5. `hbase-major-compact-htable.hbase`:HBase的重大合并(Major Compaction)是将多个HFile合并成一个,以减少数据文件的数量并优化空间使用。这个脚本可能就是执行这个操作的命令。 6. `README.md`:这是一个...

    通俗易懂的Hbase升级版教程(含配套资料)

    主要讲述了HBase详细的架构原理及特点、HBase内部各个角色的详细介绍、安装配置、HBase的Shell操作、新旧版本的读写数据详细流程、HBase的API操作、使用MapReduce以及Hive对HBase数据分析、Rowkey设计、预分区设计、...

    大数据资料

    "EBAY-HBase-运维.pdf"可能是eBay公司关于HBase运维实践的分享,它可能涵盖了HBase的日常监控、故障排查、性能调优等方面,对于运营大规模HBase集群的专业人士来说,这是极其宝贵的参考资料。 "资料"这个目录可能...

Global site tag (gtag.js) - Google Analytics