Index: LoadBalancer.java =================================================================== --- LoadBalancer.java (版本 1135362) +++ LoadBalancer.java (工作副本) @@ -164,13 +164,21 @@ return null; } int numRegions = 0; + StringBuilder strBalanceParam = new StringBuilder("Server information: "); + // Iterate so we can count regions as we build the map for(Map.Entry> server: clusterState.entrySet()) { server.getKey().getLoad().setNumberOfRegions(server.getValue().size()); numRegions += server.getKey().getLoad().getNumberOfRegions(); serversByLoad.put(server.getKey(), server.getValue()); + + strBalanceParam.append(server.getKey().getServerName()).append("=") + .append(server.getValue().size()).append(", "); } + strBalanceParam.delete(strBalanceParam.length() - 2, + strBalanceParam.length()); + LOG.info(strBalanceParam.toString()); // Check if we even need to do any load balancing float average = (float)numRegions / numServers; // for logging @@ -189,6 +197,13 @@ int min = numRegions / numServers; int max = numRegions % numServers == 0 ? min : min + 1; + // Using to check banance result. + strBalanceParam.delete(0, strBalanceParam.length()); + strBalanceParam.append("Balance parameter: numRegions=").append(numRegions) + .append(", numServers=").append(numServers).append(", max=").append(max) + .append(", min=").append(min); + LOG.info(strBalanceParam.toString()); + // Balance the cluster // TODO: Look at data block locality or a more complex load to do this List regionsToMove = new ArrayList(); @@ -210,7 +225,8 @@ List regions = randomize(server.getValue()); int numToOffload = Math.min(regionCount - max, regions.size()); int numTaken = 0; - for (int i = regions.size() - 1; i >= 0; i--) { + + for (int i = 0; i < regions.size(); i++) { HRegionInfo hri = regions.get(i); // Don't rebalance meta regions. if (hri.isMetaRegion()) continue; @@ -337,10 +353,10 @@ } // All done! - LOG.info("Calculated a load balance in " + (endTime-startTime) + "ms. " + - "Moving " + regionsToMove.size() + " regions off of " + - serversOverloaded + " overloaded servers onto " + - serversUnderloaded + " less loaded servers"); + LOG.info("All done! Calculated a load balance in " + (endTime - startTime) + + "ms. " + "Moving " + regionsToMove.size() + " regions off of " + + serversOverloaded + " overloaded servers onto " + serversUnderloaded + + " less loaded servers"); return regionsToMove; }