@Override
  protected boolean shouldSplit() {
    float blockedReqRate = updateRate();
    if (super.shouldSplit()) {
      return true;
    }

    if (EnvironmentEdgeManager.currentTime() < startTime + minAge) {
      return false;
    }

    for (HStore store : region.getStores()) {
      if (!store.canSplit()) {
        return false;
      }
    }

    if (blockedReqRate >= maxBlockedRequests) {
      if (LOG.isDebugEnabled()) {
        LOG.debug("Going to split region " + region.getRegionInfo().getRegionNameAsString()
          + " because it's too busy. Blocked Request rate: " + blockedReqRate);
      }
      return true;
    }

    return false;
  }
This class represents a split policy which makes the split decision based on how busy a region
is. The metric that is used here is the fraction of total write requests that are blocked due to
high memstore utilization. This fractional rate is calculated over a running window of
"hbase.busy.policy.aggWindow" milliseconds. The rate is a time-weighted aggregated average of the
rate in the current window and the true average rate in the previous window.
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.java