`

Hadoop HBase中Compaction原理学习

 
阅读更多
HBase Compaction策略
RegionServer这种类LSM存储引擎需要不断的进行Compaction来减少磁盘上数据文件的个数和删除无用的数据从而保证读性能。

RegionServer后台有一组负责flush region的线程(MemStoreFlusher),每次从flushQueue中拿出一个flush region请求,会检查这个region是否有某个store包含的storefile个数超过配置
hbase.hstore.blockingStoreFiles,默认7
,如果超过,说明storefile个数已经到了会影响读性能的地步,那么就看这个flush region请求是否已经有blockingWaitTime(hbase.hstore.blockingWaitTime,默认90s)没有执行了,如果是,这时候需要立即执行flush region,为了防止OOM。如果没有超过blockingWaitTime,那么先
看看region是否需要分裂,如果不需要,则向后台的CompactionSplitThread请求做一次
Compaction(从这里可以看出,split优先级比compaction高),然后重新将这个flush region加入
flushQueue,延后做flush.

HBase根据合并规模将Compaction分为了两类:MinorCompaction和MajorCompaction

Minor Compaction是指选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,在这个过程中不会处理已经Deleted或Expired的Cell。一次Minor Compaction的结果是更少并且更大的StoreFile。

Major Compaction是指将所有的StoreFile合并成一个StoreFile,这个过程还会清理三类无意义数据:被删除的数据、TTL过期数据、版本号超过设定版本号的数据。另外,一般情况下,Major Compaction时间会持续比较长,整个过程会消耗大量系统资源,对上层业务有比较大的影响。因此线上业务都会将关闭自动触发Major Compaction功能,改为手动在业务低峰期触发。

HBase中可以触发compaction的因素有很多,最常见的因素有这么三种:Memstore Flush、后台线程周期性检查、手动触发。

1. Memstore Flush: 应该说compaction操作的源头就来自flush操作,memstore flush会产生HFile文件,文件越来越多就需要compact。因此在每次执行完Flush操作之后,都会对当前Store中的文件数进行判断,一旦文件数# > ,就会触发compaction。需要说明的是,compaction都是以Store为单位进行的,而在Flush触发条件下,整个Region的所有Store都会执行compact,所以会在短时间内执行多次compaction。

2. 后台线程周期性检查: 后台线程CompactionChecker定期触发检查是否需要执行compaction,检查周期为:hbase.server.thread.wakefrequency*hbase.server.compactchecker.interval.multiplier。和flush不同的是,该线程优先检查文件数#是否大于,一旦大于就会触发compaction。如果不满足,它会接着检查是否满足major compaction条件,简单来说,如果当前store中hfile的最早更新时间早于某个值mcTime,就会触发major compaction,HBase预想通过这种机制定期删除过期数据。上文mcTime是一个浮动值,浮动区间默认为[7-7*0.2,7+7*0.2],其中7为hbase.hregion.majorcompaction,0.2为hbase.hregion.majorcompaction.jitter,可见默认在7天左右就会执行一次major compaction。用户如果想禁用major compaction,只需要将参数hbase.hregion.majorcompaction设为0

3. 手动触发:一般来讲,手动触发compaction通常是为了执行major compaction,原因有三,其一是因为很多业务担心自动major compaction影响读写性能,因此会选择低峰期手动触发;其二也有可能是用户在执行完alter操作之后希望立刻生效,执行手动触发major compaction;其三是HBase管理员发现硬盘容量不够的情况下手动触发major compaction删除大量过期数据;无论哪种触发动机,一旦手动触发,HBase会不做很多自动化检查,直接执行合并。

其实Compaction还是HBase删除过期数据的唯一手段。


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    hbase 学习 hbase原理 hbase资料

    通过深入学习HBase,你可以掌握如何在大数据环境中构建高性能的实时数据存储系统。记住,理论知识与实践相结合是掌握HBase的关键,通过实际操作和项目经验,你会对HBase有更深入的理解。提供的“hbase 培训”资料...

    含有hadoop+hbase jar包

    在实际应用中,开发人员通常会将Hadoop和HBase相关的库打包成JAR文件,方便在集群环境中部署和运行。这些JAR文件包含了所有必要的类和依赖,可以简化开发过程,提高开发效率。对于"含有hadoop+hbase jar包",意味着...

    HBase源代码 hbase-0.98.23

    同时,HBase还支持Compaction操作,通过`org.apache.hadoop.hbase.regionserver.StoreFileCompactor`类合并多个StoreFile以减少I/O开销。 总之,通过对hbase-0.98.23源代码的深入学习,我们可以了解到HBase如何实现...

    Hadoop和Hbase测试题.pdf

    在HBase中,数据修改通常是追加操作,不支持原地更新,删除数据会留下 tombstone 标记,后续通过Compaction过程来真正删除。这使得HBase更适合处理高并发的写操作和实时查询,而Oracle等RDBMS则更强调事务一致性和...

    大数据云计算技术系列 Hadoop之Hbase从入门到精通(共243页).rar

    总之,《大数据云计算技术系列:Hadoop之HBase从入门到精通》涵盖了从基础理论到实践应用的全面内容,是学习和掌握HBase的宝贵资源。通过深入学习,读者可以更好地应对大数据时代的挑战,利用HBase构建高效、可扩展...

    常用大数据工具学习实战,包含Hadoop、HBase、Kafka、Click-bigdata-practice.zip

    学习这些工具,你需要理解它们的基本概念、架构和工作原理,以及如何在实际项目中进行配置和调优。例如,对于Hadoop,你需要了解HDFS的副本策略、NameNode和DataNode的角色,以及MapReduce的作业执行流程。在HBase中...

    Hbase1.3.1源码

    源码中的`org.apache.hadoop.hbase.regionserver.Store`和`org.apache.hadoop.hbase.regionserver.HStore`类涉及到了Compaction的具体实现。 10. **HBase客户端API**:HBase提供Java、REST、Thrift等多种客户端API...

    Hbase实验报告.pdf

    **HBase实验报告** 在本实验中,我们主要聚焦于HBase,这是一个基于谷歌Bigtable设计的开源...在后续的学习和实践中,应深入研究HBase的其他高级特性,如Region Split、Compaction等,以便更好地应用到实际项目中。

    Hadoop之Hbase从入门到精通.docx

    HBase是一种分布式、面向列的NoSQL数据库,作为Hadoop生态系统的一部分,HBase可以对大规模数据进行存储和处理。然而,HBase的性能调优是非常重要的,否则可能会导致性能下降,影响应用程序的运行效率。在本文中,...

    hbase原理和设计

    ### HBase原理与设计 #### 一、HBase概述 HBase是一个开源的、高性能的分布式存储系统,基于Hadoop之上构建。它提供了一个高度可靠、面向列的存储方案,适用于处理大规模的数据集。HBase的设计特点包括: 1. **高...

    Hbase学习总结.rar

    HBase是Apache Hadoop生态系统的一部分,它运行在Hadoop分布式文件系统(HDFS)之上,提供实时的数据访问和强大的读写性能。 ### 一、HBase概述 1. **NoSQL数据库**:HBase属于非关系型数据库(NoSQL),不遵循...

    hbase1.0.3_part2

    3. **HBase的Compaction**:Compaction是HBase中用于合并HFile的过程,目的是减少Region内的文件数量,提高读取效率。有两种类型的Compaction:Minor和Major,前者只合并同一Region的小文件,后者会合并所有文件,...

    大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第12期副刊_HBase性能优化_V1.0 共26页.pdf

    【大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第12期副刊_HBase性能优化_V1.0 共26页.pdf】 本文档主要关注Hadoop集群中的HBase性能优化,提供了从配置角度进行优化的建议。HBase是一个分布式列式存储...

    hbase数据可视化系统

    使用HBase的Compaction和Split机制,保持Region的平衡;并考虑使用二级索引提高查询效率。 六、总结 通过SpringBoot搭建的HBase可视化系统,使得非技术人员也能便捷地管理和操作HBase,降低了使用门槛,提高了工作...

    hbase-1.2.0-cdh5.14.0.tar.gz

    HBase是Apache Hadoop生态系统中的一个分布式、版本化、基于列族的NoSQL数据库,它在大规模数据存储和实时查询方面表现出色。"hbase-1.2.0-cdh5.14.0.tar.gz" 是针对Cloudera Distribution Including Apache Hadoop ...

    hbase-1.3.0.tar.gz

    HBase依赖于HDFS来持久化数据,Hadoop 2.x版本引入了YARN(Yet Another Resource Negotiator),优化了资源管理,使得HBase可以在多任务并行运行的环境中高效地处理数据。 Hive 2.3.6是基于Hadoop的数据仓库工具,...

    hbase相关的安装包

    在这个“hbase相关的安装包”中,包含了两个关键组件:hadoop-common-2.2.0-bin-master和hbase-0.98.3-hadoop2。 1. **Hadoop Common**: Hadoop Common是Hadoop项目的基础模块,包含Hadoop运行所需的通用工具和...

    hbase-2.4.17-bin 安装包

    HBase是Apache Hadoop生态系统中的一个分布式、版本化、列族式存储系统,设计用于处理大规模数据集。这个“hbase-2.4.17-bin”安装包提供了HBase的最新稳定版本2.4.17,适用于大数据处理和分析场景。下面将详细介绍...

    大数据书籍-Hbase架构设计(高清)

    书中详细阐述了Hbase的核心原理、生态环境以及在实际项目中的架构设计与性能优化策略,旨在帮助读者全面理解并掌握Hbase的运用。 Hbase作为Apache Hadoop生态系统的一部分,是一款开源的、非关系型的分布式数据库,...

    Hadoop 集群(第 12 期副刊)-HBase性能优化.pdf

    在一篇名为《Hadoop and HBase Optimization for Read Intensive Search Applications》的文章中,作者提到了在配备SSD硬盘的服务器上将RegionServer的请求处理IO线程数设置为100的例子。这一设置是在特定的应用场景...

Global site tag (gtag.js) - Google Analytics