位置:org.apache.hadoop.hbase.regionserver
说明:该类管理了RegionServer中对region的compact和split操作。
构造函数
在构造函数中,该类需要做如下一些操作:
- 从配置文件获取并配置基本的参数
- stealJobQueue实例初始化。该实例允许一个ThreadPoolExecutor从另一个ThreadPoolExecutor中获取工作任务。
- 初始化longCompactions线程池
- 初始化shortCompactions线程池
- 初始化split线程池
- 初始化mergePool线程池
- 初始化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相关问题的定位,都可以从这个入口开始。