Hbase region split源代码阅读笔记

本文详细介绍了HBase中表分裂的过程与实现机制。通过HbaseAdmin类的split方法,可以针对特定的region或者整个表进行分裂操作。文章还深入探讨了分裂过程中涉及的HRegionInfo、RegionServer等关键组件及其交互过程。
客户端
1. HbaseAdmin.split(final byte [] tableNameOrRegionName,
final byte [] splitPoint)

这个方法首先判断参数是regionName还是tableName;如果是regionName则只分裂该region,如果是tableName则分裂该表下的所有region

if (isRegionName(tableNameOrRegionName)) {//如果是regionName
// Its a possible region name.
Pair<HRegionInfo, HServerAddress> pair =
MetaReader.getRegion(ct, tableNameOrRegionName);//读出regionInfo和RegionServerAddress
if (pair == null || pair.getSecond() == null) {
LOG.info("No server in .META. for " +
Bytes.toStringBinary(tableNameOrRegionName) + "; pair=" + pair);
} else {
split(pair.getSecond(), pair.getFirst(), splitPoint);//调用方法分裂该region
}
} else {{//如果是tableName
List<Pair<HRegionInfo, HServerAddress>> pairs =
MetaReader.getTableRegionsAndLocations(ct,
Bytes.toString(tableNameOrRegionName));//读出table下的一批region
for (Pair<HRegionInfo, HServerAddress> pair: pairs) {
// May not be a server for a particular row
if (pair.getSecond() == null) continue;
HRegionInfo r = pair.getFirst();
// check for parents
if (r.isSplitParent()) continue;
if (splitPoint != null) {
// if a split point given, only split that particular region
if (!r.containsRow(splitPoint)) continue;
}
split(pair.getSecond(), pair.getFirst(), splitPoint);调用方法分裂这批region

}

2. HbaseAdmin.split(final HServerAddress hsa, final HRegionInfo hri,
byte[] splitPoint)

这只是个代理方法,调起regionserver的远程接口
HRegionInterface rs = this.connection.getHRegionConnection(hsa);
rs.splitRegion(hri, splitPoint);

RegionServer服务端
3.HRegionServer.splitRegion(HRegionInfo regionInfo, byte[] splitPoint)

checkOpen();//检查regionserver是否停止
HRegion region = getRegion(regionInfo.getRegionName());//拿到在线region
region.flushcache();//写memstore到hfile
region.forceSplit(splitPoint);//设置了两个值this.splitRequest=true 和 splitPoint = sp
// force a compaction, split will be side-effect
// TODO: flush/compact/split refactor will make it trivial to do this
// sync/async (and won't require us to do a compaction to split!)
compactSplitThread.requestCompaction(region, "User-triggered split",
CompactSplitThread.PRIORITY_USER);//异步发起一个region的compact操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值