HBase1.2.1源代码阅读——compactSplitThread阅读笔记

本文详细介绍了HBase中RegionServer的Region管理类,包括compact、split和merge操作的实现细节。构造函数中初始化了多个线程池用于处理不同类型的Region操作,并通过请求方法提交具体的合并和分裂任务。

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

位置:org.apache.hadoop.hbase.regionserver

说明:该类管理了RegionServer中对region的compact和split操作。

构造函数

在构造函数中,该类需要做如下一些操作:

  1. 从配置文件获取并配置基本的参数
  2. stealJobQueue实例初始化。该实例允许一个ThreadPoolExecutor从另一个ThreadPoolExecutor中获取工作任务。
  3. 初始化longCompactions线程池
  4. 初始化shortCompactions线程池
  5. 初始化split线程池
  6. 初始化mergePool线程池
  7. 初始化CompactionThroughputController实例。该类的作用就是通过sleep来控制在compaction过程中的吞吐量

requestRegionsMerge方法

向mergePool中提交merge请求实例,后续的类似

    public synchronized void requestRegionsMerge(final Region a,
                                                 final Region b, final boolean forcible, long masterSystemTime, User user) {
        try {
            mergePool.execute(new RegionMergeRequest(a, b, this.server, forcible, masterSystemTime, user));
            if (LOG.isDebugEnabled()) {
                LOG.debug("Region merge requested for " + a + "," + b + ", forcible="
                        + forcible + ".  " + this);
            }
        } catch (RejectedExecutionException ree) {
            LOG.warn("Could not execute merge for " + a + "," + b + ", forcible="
                    + forcible, ree);
        }
    }

requestSplit方法

    public synchronized void requestSplit(final Region r, byte[] midKey, User user) {
        if (midKey == null) {
            LOG.debug("Region " + r.getRegionInfo().getRegionNameAsString() +
                    " not splittable because midkey=null");
            LOG.info("Region " + r.getRegionInfo().getRegionNameAsString() +
                    " not splittable because midkey=null");
            if (((HRegion) r).shouldForceSplit()) {
                ((HRegion) r).clearSplit();
            }
            return;
        }
        try {
            this.splits.execute(new SplitRequest(r, midKey, this.server, user));
            if (LOG.isDebugEnabled()) {
                LOG.debug("Split requested for " + r + ".  " + this);
            }
        } catch (RejectedExecutionException ree) {
            LOG.info("Could not execute split for " + r, ree);
        }
    }

 

后记

对于RegionServer中compact,split,merge相关问题的定位,都可以从这个入口开始。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值