展开

关键词

首页关键词Compaction

Compaction

HBase是一种Log-StructuredMergeTree架构模式,用户数据写入先写WAL,再写缓存,满足一定条件后缓存数据会执行flush操作真正落盘,形成一个数据文件HFile。随着数据写入不断增多,flush次数也会不断增多,进而HFile数据文件就会越来越多。然而,太多数据文件会导致数据查询IO次数增多,因此HBase尝试着不断对这些文件进行合并,这个合并过程称为Compaction。Compaction会从一个region的一个store中选择一些hfile文件进行合并。合并说来原理很简单,先从这些待合并的数据文件中读出KeyValues,再按照由小到大排列后写入一个新的文件中。之后,这个新生成的文件就会取代之前待合并的所有文件对外提供服务。HBase根据合并规模将Compaction分为了两类:MinorCompaction和MajorCompaction.

相关内容

  • LevelDB:Compaction

    class Compaction 封装了本次要进行 compaction 的信息。( class Compaction 的相关代码 )。人工触发的 compaction 走另一个分支,暂不讨论。一般的 compaction 分下面几步: 1)调用 DoCompactionWork, 执行 compaction。小结Compaction 都是通过 MaybeScheduleCompaction函数触发的。Compaction 是单线程异步完成的。因为有可能 level_n 的这次 compaction 导致 level_n+1 的 size 太大,需要进行 compaction。Compaction 是单线程异步完成的,所以,LevelDB 的写入速度在一定程度上受限于 compaction 的速度。
    来自:
    浏览:974
  • Hbase compaction 源码分析二:详细 compaction 过程

    doCompaction方法是真正实现方法,在为了完成compact一共分为以下步骤:1.选择需要Compaction的问题(只有Minor compaction)2.执行前置listener3.在region中以store为单位执行compaction4.是否需要split5.执行后置listerner??在保证当前store并没有在compaction后:1.首先对region的lock锁加上读锁;2.创建一个status用于监控和跟踪compaction的过程3.调用doRegionCompactionPrep1.检查compactRequest参数2.通过compaction(DefaultStoreEngine,查看类图)的compaction方法,并返回compaction后的新hfile文件3.根据hbase.hstore.compaction.completePS,compaction对hbase的读写性能均有一定影响,有关对性能影响以及相关调优可参考:http:hbasefly.com20160713hbase-compaction-1http:hbasefly.com20160725hbase-compaction
    来自:
    浏览:835
  • 广告
    关闭

    50+款云产品免费体验

    提供包括云服务器,云数据库在内的50+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到
  • LevelDB 完全解析(11):Compaction

    Compaction 的作用因为 LevelDB 的增删改都是通过追加写来实现的,所以需要通过后台线程的 compaction 来:清理过期(旧版本或者已删除)的数据。维护数据的有序性。Major Compaction每次 compaction 结束,更新 manifest 之后,都会调用 VersionSet::Finalize 计算下一次要进行 major compaction 的每次 major compaction 开始时,调用 VersionSet::PickCompaction 计算需要进行 compaction 的 SSTable。Compaction 的问题Compaction 会对 LevelDB 的性能和稳定性带来一定影响:消耗 CPU:对 SSTable 进行解析、解压、压缩。这种做法带来一个问题:compaction 的速度应该控制在多少?Compaction 的速度如果太快,会影响系统性能;Compaction 的速度如果太慢,会阻塞写请求。
    来自:
    浏览:478
  • Hbase compaction 源码分析一:compaction 概况分析

    一次Minor Compaction的结果是更少并且更大的StoreFile。另外,一般情况下,Major Compaction时间会持续比较长,整个过程会消耗大量系统资源,对上层业务有比较大的影响。因此线上业务都会将关闭自动触发Major Compaction功能,改为手动在业务低峰期触发。 chore方法中needsCompaction判断的是minor compact是否需要执行。因此,通过设置hbase.hregion.majorcompaction = 0可以关闭CompactionChecke触发的major compaction,但是无法关闭用户调用级别的majorcompact
    来自:
    浏览:1045
  • 深入理解 HBase Compaction 机制

    Compaction 作用其实Compaction操作属于资源密集型操作特别是IO密集型,这点后面也会提及到,Compaction本质上其实就是牺牲了部分IO,以换取相对稳定的读取性能。Compaction 分类HBase Compaction分为两种:Minor Compaction 与 Major Compaction,通常我们简称为小合并、大合并。下面是一个简单示意图?HBase每次flush之后,都会判断是否要进行compaction,一旦满足minor compaction或major compaction的条件便会触发执行。compaction,后者处理小规模compaction,线程池大小都默认为 1 即只分别提供了一个线程用于相应的compaction。Compaction操作分为minor compaction与major compaction,其中major compaction消耗资源较大、对读写请求有一定影响,因此一般是禁用自动周期性执行而选择业务低峰期时手动执行
    来自:
    浏览:3511
  • page compaction代码分析之一

    重要的数据结构* * Determines how hard direct compaction should try to succeed. * Lower value means higher prioritymore suitable * COMPACT_SKIPPED, * compaction didnt start as it was deferred due to past failures *detailed tracepoint output - internal to compaction * COMPACT_NO_SUITABLE_PAGE, * compaction should如果申请太小,则page compaction就会太频繁,系统负载就会增加判断一个zone是否合适做page compactionenum compact_result compaction_suitable在结构体zone中就定义了推迟整理的几个字段struct zone {#ifdef CONFIG_COMPACTION * * On compaction failure, 1compact_defer_shift
    来自:
    浏览:295
  • 面试必考点:HBase Compaction机制

    诱发因子在什么情况下会发生Compaction呢?这里r的含义是compaction比例,它有如下四个参数控制:配置项默认值含义hbase.hstore.compaction.ratio1.2Fhbase.hstore.compaction.ratio.offpeak5.0FFigure 1 Minor Compaction File Selection Algorithm这样做使得Compaction尽可能工作在最近刷入hdfs的小文件的合并,从而使得提高Compactionhbase.hstore.compaction.max:设置执行Compaction(包括Major &Minor)的待合并文件的最大个数。Compaction对于读写操作的影响Compaction与Flush不同之处在于:Flush是针对一个Region整体执行操作,而Compaction操作是针对Region上的一个Store而言,因此
    来自:
    浏览:344
  • page compaction原理

    为了解决内存碎片问题,linux内核引入了page compaction技术,俗称页块整理。page compaction的步骤:代码中运行两个独立分扫描队列,第一个扫描队列从zone的底部从下往上扫描,一边扫描一边讲可以移动(Moveable)的页放入到此链表中,可以将此链表称为迁移扫描器?当迁移扫描器和空闲扫描器相遇之后,就意味着page compaction结束了。剩下的工作就是将迁移扫描器的page copy到空闲扫描器,然后接触迁移扫描器的页面对应关系。最终会形成如下的结果 ?当然page compation有两种触发方式: 当分配page的时候,在LOW水位出现分配失败的时候,会尝试slowth分配的,在当中就会出现page compaction的流程工程师可以通过echox > procsysvmcompact_memory来启动page compaction的动作,启动后内核线程kcompactd*就会启动来进行页面整理的此时当我在ubuntu上执行echo 1 >
    来自:
    浏览:313
  • Hbase Region Split compaction 过程分析以及调优

    Compaction 通过上面的分析知道 Hbase 的 compaction 在 CompactSplitThread 中分 longCompation 和 smallCompaction,而触发 compaction操作则需要根据 compaction 的策略而定,hbase 的 compaction 策略即是挑选需要合并的 hfile,挑选的原则是文件数不能太多、不能太少、文件大小不能太大等等,最理想的情况是,如果不满足,它会接着检查是否满足 major compaction 条件,简单来说,如果当前 store 中 hfile 的最早更新时间早于某个值 mcTime,就会触发 major compaction3、手动触发:一般来讲,手动触发 compaction 通常是为了执行 major compaction,原因有三,其一是因为很多业务担心自动 major compaction 影响读写性能,因此会选择低峰期手动触发选择合适 HFile 合并 选择合适的文件进行合并是整个 compaction 的核心,因为合并文件的大小以及其当前承载的 IO 数直接决定了 compaction 的效果。
    来自:
    浏览:3021
  • HBase原理 | HBase Compaction介绍与参数调优

    因此HBase会定期执行Compaction操作以合并减少HFile数量。1.两种合并HBase中Compaction分为两种。参数调优1).hbase.hstore.compaction.min默认值 3,一个列族下的HFile数量超过该值就会触发Minor Compaction,这个参数默认值小了,一般情况下建议调大到5~10(旧版本中该参数是hbase.hstore.compactionthreshold)2).hbase.hstore.compaction.max默认值 10,一次Minor Compaction最多合并的,用来分开处理Compaction操作,这个参数就是控制一个Compaction应该交由哪一个线程池处理,默认值2 * hbase.hstore.compaction.max * hbase.hregion.memstore.flush.size因为通常Major Compaction持续时间长、资源消耗大,建议关闭HBase Major Compaction,参数设为0,并在业务低峰期手动执行。 wxlogo2.png
    来自:
    浏览:659
  • MLSQL 内置Delta数据湖以及Compaction功能介绍

    不过当时只是尝鲜性质,主要原因是因为我一直觉得delta缺了Compaction功能。很多公司其实都有小文件的困扰,而Delta这个问题会更严重。不过MLSQL现在也自己实现了一个Compaction的功能,并且对delta做了一定的集成和增强。image.pngCompaction前置条件Compaction 实现参看这里Github。只有一个文件,用户兼容0.1.0版本,用户可以直接拷贝的自己项目里。使用Compaction的前提有如下几个:delta表至少发生了一次checkpoint.默认是有十次提交就会产生一个新的checkpoint.批流都需要为append 模式往表里写数据Compactionimage.png一个Compaction也是一次提交:?image.png我们删除了16个文件,生成了两个新文件。另外在compaction的时候,并不影响读和写。所以是非常有用的。
    来自:
    浏览:340
  • Influxdb中的Compaction操作

    Influxdb中的Compaction操作Compaction概述Influxdb的存储引擎使用了TSM文件结构,这其实也是在LSM-Tree基础针对时序特点作了改进,因此其与LSM-Tree类似,也有WAL和SSTable;既然是类似LSM-Tree,也需要Compation, 将内存MemTable的数据持久化到磁盘,将磁盘上的若干文件merge,以便减少文件个数,优化读效率;Influxdb的Compaction通常来说需要两步: 生成一个compaction计划,简单来说就是生成一组可以并行compaction的文件列表;针对一组tsm文件来作compation;Compaction计划的生成CompactionPlannerPlanOptimize() CompactionGroup) FullyCompacted() bool ForceFull causes the planner to return a full compactionv) } c.mu.RLock() forceFull := c.forceFull c.mu.RUnlock() first check if we should be doing a full compaction
    来自:
    浏览:823
  • Hudi 压缩(Compaction)实现分析

    来自:
    浏览:581
  • memory compaction原理、实现与分析

    来自:
    浏览:68
  • Apache Hudi 异步Compaction部署方式汇总

    来自:
    浏览:200
  • 从原理到参数解析,HBase 刷写与合并机制介绍

    Compaction 类型Compaction 分为两种:Minor Compaction 与 Major Compaction,可以称为小合并、大合并,简单示意图:?Compaction 触发时机概括的说,HBase 会在三种情况下检查是否要触发 Compaction,分别是 MemStore Flush、后台线程周期性检查、手动触发。HBase 每次Flush 之后,都会判断是否要进行 Compaction,一旦满足 Minor Compaction 或 Major Compaction 的条件便会触发执行。Compaction 核心参数和上面类似,这里总结了几个和 Compaction 有关的重要参数,并给出调整建议: 1、hbase.hstore.compaction.min默认值 3,一个 Store中 HFile 文件数量超过该阈值就会触发一次 Compaction(Minor Compaction),这里称该参数为 minFilesToCompact。
    来自:
    浏览:349
  • HBase 写吞吐场景资源消耗量化分析及优化

    HBase 通过 Compaction 机制将多个 HFile 合并成一个 HFile 以控制每个 Region 内的 HFile 的数目在一定范围内, 当然 Compaction 还有其他的作用,比如数据本地化率→ CT (默认是 3, 一般情况下,决定了归并系数,即每次 9. compaction 参与的文件数目,在不存在 compaction 积压的情况下, 实际运行时也是在 3 左右)数据生命周期 →(默认 3)和 hbase.hstore.compaction.max(默认 10)之间, 总文件大小小于 hbase.hstore.compaction.max.size(默认 Max), 如果文件的所以,在 Compaction 没有积压的情况下,每次 compaction 选中的文件数目会等于 hbase.hstore.compaction.min 并且文件 size 应该相同量级, 对稳定的表,可以设置 hbase.hstore.compaction.max.size 为 4g,尽可能减少过大的文件做 Compaction,因为大文件做 compaction 的 ROI 实在太低对于没有多版本并且有
    来自:
    浏览:397
  • RocksDB阻写

    当预计的compaction数据量到达soft_pending_compaction_bytes时,会写限速。当预计的compaction数据量到达hard_pending_compaction_bytes时,会写阻塞,等待compaction。,如果预计的compaction数据量还在不断的累积,那么写入速度降到比delayed_write_rate还要低。数据量太大,或是compaction速度赶不上写入速度。注意,可以通过降低写放大来减少compaction时需要写入的数据量,因此可以设置compaction.Option中的以下参数: 增大max_background_compactions(增大compact
    来自:
    浏览:676
  • 图数据库 Nebula Graph TTL 特性

    RocksDB compaction 逻辑 我们采用的 RocksDB 的 compaction 策略为 Level compaction。Level 0 与 Level 1 的 compaction 如下: Level 0 与 Level 1 的 compaction 其他 Level 的 compaction 规则一样,以 Level1与 Level 2 的 compaction 为例进行说明,如下所示: Level 1 与 Level 2 的 compaction 当 Level 0 compaction 完成后,Level从 Level 1 层至少选择一个文件 compaction 到 Level 2 的 key 重叠的文件中。compaction 后可能会触发下一个 Level 的 compaction,以此类推。TTL compaction 原理 除了上述默认的compaction操作外(sst文件合并),RocksDB 还提供了CompactionFilter 功能,可以让用户自定义个性化的compaction
    来自:
    浏览:265
  • 我们常说的海量小文件的根源是什么?

    HBase还有minor compaction和 major compaction之分。截止到目前(0.4.0版本),Delta还没有提供类似的compaction功能,但是基于Delta已经提供的扩展接口,我们也可以很轻易的实现compaction的功能。Compaction的核心点是,在做compaction的过程不能影响读写,而Delta的版本设计可以很简单的做到这一点。我在Delta Plus里实现了一个compaction的版本。而只有append操作的表,他的文件是一个一直增长的过程,所以需要我们手动进行compaction操作。Delta compaction过程Delta的compaction因为有了上面的约束,会变得异常简单。
    来自:
    浏览:347

扫码关注云+社区

领取腾讯云代金券