@Override
  public void perform() throws Exception {
    getLogger().info("Unbalancing regions");
    ClusterMetrics status = this.cluster.getClusterMetrics();
    List<ServerName> victimServers = new ArrayList<>(status.getLiveServerMetrics().keySet());
    int targetServerCount = (int) Math.ceil(fractionOfServers * victimServers.size());
    List<ServerName> targetServers = new ArrayList<>(targetServerCount);
    Random rand = ThreadLocalRandom.current();
    for (int i = 0; i < targetServerCount; ++i) {
      int victimIx = rand.nextInt(victimServers.size());
      targetServers.add(victimServers.remove(victimIx));
    }
    unbalanceRegions(status, victimServers, targetServers, fractionOfRegions);
  }
Unbalances the regions on the cluster by choosing "target" servers, and moving some regions
from each of the non-target servers to random target servers.
@param fractionOfRegions Fraction of regions to move from each server.
@param fractionOfServers Fraction of servers to be chosen as targets.
hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceRegionsAction.java