HBase 源码学习 ---- Flush(1)

本文详细梳理了HBase的Flush流程,从HRegionServer、PeriodicMemstoreFlusher到MemStoreFlusher,探讨了相关超参数、方法及线程处理。通过分析flushOneForGlobalPressure()和flushRegion()方法,揭示了HBase如何选择并执行flush操作,以保持数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HBase Flush 流程梳理

最近在做HBase 写入方面的优化,因为刚接触HBase,在此把HBase Flush流程记录下来,方便以后查阅。作为HBase新手,难免有错误,还望大家指正。本文使用的hbase版本是1.4.12。

HRegionServer

在HRegionServer类中,首先调用initializeThread()方法进行初始化,与Flush相关的主要有两个成员变量:cacheFlusher 和 periodicFlusher 分别属于MemStoreFlusher 和 PeriodicMemstoreFlusher 两个类。在startServiceThreads() 方法中启动这两个对象。

this.cacheFlusher.start(uncaughtExceptionHandler);
if (this.periodicFlusher != null) {
   
   
	choreService.scheduleChore(periodicFlusher);
}

在HRegionServer中,与Flush相关的超参数有:

  • hbase.server.thread.wakefrequency
    在master节点:控制一些FS相关行为的调用频率: 检查hdfs是否处于安全模式,设置或检查hbase版本文件,设置或检查hbase.id文件。
    在RegionServer节点:flush 检查间隔,compaction 检查间隔,wal回滚间隔。
    默认值:10000 (毫秒)
  • hbase.regionserver.flush.check.period
    RegionServer 周期性flush的间隔。
    默认值:hbase.server.thread.wakefrequency

PeriodicMemstoreFlusher

PeriodicMemstoreFlusher是HRegionServer的一个静态内部类。继承自抽象类ScheduledChore。初始化的时候,有一个整型成员变量rangeOfDelay用来控制flush的数量。

this.rangeOfDelay = this.server.conf.getInt("hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds",
              RANGE_OF_DELAY)*1000;

整个PeriodicMemstoreFlusher逻辑比较简单,chore()方法如下:

@Override
    protected void chore() {
   
   
      final StringBuffer whyFlush = new StringBuffer();
      for (Region r : this.server.onlineRegions.values()) {
   
   
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值