Examples of RegionPlan


Examples of org.apache.hadoop.hbase.master.RegionPlan

      ServerName sn = am.getRegionServerOfRegion(regionInfo);
      String indexTableName = IndexUtils.getIndexTableName(regionInfo.getTableNameAsString());
      List<HRegionInfo> tableRegions = am.getRegionsOfTable(Bytes.toBytes(indexTableName));
      for (HRegionInfo hRegionInfo : tableRegions) {
        if (0 == Bytes.compareTo(hRegionInfo.getStartKey(), regionInfo.getStartKey())) {
          am.addPlan(hRegionInfo.getEncodedName(), new RegionPlan(hRegionInfo, null, sn));
          LOG.info("Assigning region " + hRegionInfo.getRegionNameAsString() + " to server " + sn
              + '.');
          am.assign(hRegionInfo, true, false, false);
        }
      }
View Full Code Here

Examples of org.apache.hadoop.hbase.master.RegionPlan

      for (HRegionInfo indexRegionInfo : tableRegions) {
        if (0 == Bytes.compareTo(indexRegionInfo.getStartKey(), regionInfo.getStartKey())) {
          LOG.info("Assigning region " + indexRegionInfo.getRegionNameAsString() + "from "
              + srcServer + " to server " + destServer + '.');
          am.putRegionPlan(indexRegionInfo, destServer);
          am.addPlan(indexRegionInfo.getEncodedName(), new RegionPlan(indexRegionInfo, null,
              destServer));
          am.unassign(indexRegionInfo);
          /*
           * ((HMaster) master).move(indexRegionInfo.getEncodedNameAsBytes(),
           * Bytes.toBytes(destServer.getServerName()));
 
View Full Code Here

Examples of org.apache.hadoop.hbase.master.RegionPlan

            LOG.debug("No user table region plans present for index table " + tableName + '.');
          }
          return null;
        }
        for (Entry<HRegionInfo, ServerName> e : regionMap.entrySet()) {
          regionPlanList.add(new RegionPlan(e.getKey(), null, e.getValue()));
        }
        // for preparing the index plan
        List<RegionPlan> indexPlanList = new ArrayList<RegionPlan>(1);
        // copy of region plan to iterate.
        List<RegionPlan> regionPlanListCopy = new ArrayList<RegionPlan>(regionPlanList);
        if (LOG.isDebugEnabled()) {
          LOG.debug("Preparing index region plans from user region plans for table " + tableName
              + ".");
        }
        return prepareIndexPlan(clusterState, indexPlanList, regionPlanListCopy);
      } else {
        regionPlanList = this.delegator.balanceCluster(userClusterState);
        if (null == regionPlanList) {
          if (LOG.isDebugEnabled()) {
            LOG.debug("User region plan is null.");
          }
          regionPlanList = new ArrayList<RegionPlan>(1);
        } else {
          saveRegionPlanList(regionPlanList);
        }
        List<RegionPlan> userRegionPlans = new ArrayList<RegionPlan>(1);

        for (Entry<String, Map<HRegionInfo, ServerName>> tableVsRegions : this.regionLocation
            .entrySet()) {
          Map<HRegionInfo, ServerName> regionMap = regionLocation.get(tableVsRegions.getKey());
          // no previous region plan for user table.
          if (null == regionMap) {
            if (LOG.isDebugEnabled()) {
              LOG.debug("No user table region plans present for index table " + tableName + '.');
            }
          } else {
            for (Entry<HRegionInfo, ServerName> e : regionMap.entrySet()) {
              userRegionPlans.add(new RegionPlan(e.getKey(), null, e.getValue()));
            }
          }
        }
        List<RegionPlan> regionPlanListCopy = new ArrayList<RegionPlan>(userRegionPlans);
        if (LOG.isDebugEnabled()) {
View Full Code Here

Examples of org.apache.hadoop.hbase.master.RegionPlan

            continue;
          }
          if (0 != Bytes.compareTo(hri.getStartKey(), indexRegionInfo.getStartKey())) {
            continue;
          }
          RegionPlan rp = new RegionPlan(indexRegionInfo, server, regionPlan.getDestination());
          if (LOG.isDebugEnabled()) {
            LOG.debug("Selected server " + regionPlan.getDestination()
                + " as destination for region " + indexRegionInfo.getRegionNameAsString()
                + "from user region plan.");
          }
View Full Code Here

Examples of org.apache.hadoop.hbase.master.RegionPlan

      if (this.skipTableStateCheck) {
        // Region may be available in enablingTableRegions during master startup only.
        if (enablingTableRegions != null && enablingTableRegions.contains(hri)) {
          regions.add(hri);
          if (sn != null && serverManager.isServerOnline(sn)) {
            this.assignmentManager.addPlan(hri.getEncodedName(), new RegionPlan(hri, null, sn));
          }
        }
      } else if (onlineRegions.contains(hri)) {
        continue;
      } else {
        regions.add(hri);
        if (sn != null && serverManager.isServerOnline(sn)) {
          this.assignmentManager.addPlan(hri.getEncodedName(), new RegionPlan(hri, null, sn));
        }
      }
    }
    return regions;
  }
View Full Code Here

Examples of org.apache.hadoop.hbase.master.RegionPlan

        ServerName tmpLocation = region_a_location;
        region_a_location = region_b_location;
        region_b_location = tmpLocation;
      }

      RegionPlan regionPlan = new RegionPlan(region_b, region_b_location,
          region_a_location);
      LOG.info("Moving regions to same server for merge: " + regionPlan.toString());
      masterServices.getAssignmentManager().balance(regionPlan);
      while (!masterServices.isStopped()) {
        try {
          Thread.sleep(20);
          // Make sure check RIT first, then get region location, otherwise
View Full Code Here

Examples of org.apache.hadoop.hbase.master.RegionPlan

            destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(2));
          }
        }

        if (destination != null) {
          RegionPlan plan = new RegionPlan(region, currentServer, destination);
          plans.add(plan);
        }
      }
    }
    return plans;
View Full Code Here

Examples of org.apache.hadoop.hbase.master.RegionPlan

          }
          dest = keyIt.next();
        }

        // Move this region away from the master regionserver
        RegionPlan plan = new RegionPlan(region, masterServerName, dest);
        if (plans == null) {
          plans = new ArrayList<RegionPlan>();
        }
        plans.add(plan);
      }
    }
    for (Map.Entry<ServerName, List<HRegionInfo>> server: clusterMap.entrySet()) {
      if (masterServerName.equals(server.getKey())) continue;
      for (HRegionInfo region: server.getValue()) {
        if (!shouldBeOnMaster(region)) continue;

        // Move this region to the master regionserver
        RegionPlan plan = new RegionPlan(region, server.getKey(), masterServerName);
        if (plans == null) {
          plans = new ArrayList<RegionPlan>();
        }
        plans.add(plan);
      }
View Full Code Here

Examples of org.apache.hadoop.hbase.master.RegionPlan

        if (LOG.isTraceEnabled()) {
          LOG.trace("Moving Region " + region.getEncodedName() + " from server "
              + initialServer.getHostname() + " to " + newServer.getHostname());
        }
        RegionPlan rp = new RegionPlan(region, initialServer, newServer);
        plans.add(rp);
      }
    }
    return plans;
  }
View Full Code Here

Examples of org.apache.hadoop.hbase.master.RegionPlan

        }
        i++;
        // Don't rebalance special regions.
        if (shouldBeOnMaster(hri)
            && masterServerName.equals(sal.getServerName())) continue;
        regionsToMove.add(new RegionPlan(hri, sal.getServerName(), null));
        numTaken++;
        if (numTaken >= numToOffload) break;
        // fetch in alternate order if there is new region server
        if (emptyRegionServerPresent) {
          fetchFromTail = !fetchFromTail;
        }
      }
      serverBalanceInfo.put(sal.getServerName(),
        new BalanceInfo(numToOffload, (-1)*numTaken));
    }
    int totalNumMoved = regionsToMove.size();

    // Walk down least loaded, filling each to the min
    int neededRegions = 0; // number of regions needed to bring all up to min
    fetchFromTail = false;

    Map<ServerName, Integer> underloadedServers = new HashMap<ServerName, Integer>();
    int maxToTake = numRegions - min;
    for (Map.Entry<ServerAndLoad, List<HRegionInfo>> server:
        serversByLoad.entrySet()) {
      if (maxToTake == 0) break; // no more to take
      int load = server.getKey().getLoad();
      if (load >= min && load > 0) {
        continue; // look for other servers which haven't reached min
      }
      int w = 1; // Normal region server has weight 1
      if (backupMasters != null
          && backupMasters.contains(server.getKey().getServerName())) {
        w = backupMasterWeight; // Backup master has heavier weight
      }
      int regionsToPut = (min - load) / w;
      if (regionsToPut == 0)
      {
        regionsToPut = 1;
      }
      maxToTake -= regionsToPut;
      underloadedServers.put(server.getKey().getServerName(), regionsToPut);
    }
    // number of servers that get new regions
    int serversUnderloaded = underloadedServers.size();
    int incr = 1;
    List<ServerName> sns =
      Arrays.asList(underloadedServers.keySet().toArray(new ServerName[serversUnderloaded]));
    Collections.shuffle(sns, RANDOM);
    while (regionsToMove.size() > 0) {
      int cnt = 0;
      int i = incr > 0 ? 0 : underloadedServers.size()-1;
      for (; i >= 0 && i < underloadedServers.size(); i += incr) {
        if (regionsToMove.isEmpty()) break;
        ServerName si = sns.get(i);
        int numToTake = underloadedServers.get(si);
        if (numToTake == 0) continue;

        addRegionPlan(regionsToMove, fetchFromTail, si, regionsToReturn);
        if (emptyRegionServerPresent) {
          fetchFromTail = !fetchFromTail;
        }

        underloadedServers.put(si, numToTake-1);
        cnt++;
        BalanceInfo bi = serverBalanceInfo.get(si);
        if (bi == null) {
          bi = new BalanceInfo(0, 0);
          serverBalanceInfo.put(si, bi);
        }
        bi.setNumRegionsAdded(bi.getNumRegionsAdded()+1);
      }
      if (cnt == 0) break;
      // iterates underloadedServers in the other direction
      incr = -incr;
    }
    for (Integer i : underloadedServers.values()) {
      // If we still want to take some, increment needed
      neededRegions += i;
    }

    // If none needed to fill all to min and none left to drain all to max,
    // we are done
    if (neededRegions == 0 && regionsToMove.isEmpty()) {
      long endTime = System.currentTimeMillis();
      LOG.info("Calculated a load balance in " + (endTime-startTime) + "ms. " +
          "Moving " + totalNumMoved + " regions off of " +
          serversOverloaded + " overloaded servers onto " +
          serversUnderloaded + " less loaded servers");
      return regionsToReturn;
    }

    // Need to do a second pass.
    // Either more regions to assign out or servers that are still underloaded

    // If we need more to fill min, grab one from each most loaded until enough
    if (neededRegions != 0) {
      // Walk down most loaded, grabbing one from each until we get enough
      for (Map.Entry<ServerAndLoad, List<HRegionInfo>> server :
        serversByLoad.descendingMap().entrySet()) {
        BalanceInfo balanceInfo =
          serverBalanceInfo.get(server.getKey().getServerName());
        int idx =
          balanceInfo == null ? 0 : balanceInfo.getNextRegionForUnload();
        if (idx >= server.getValue().size()) break;
        HRegionInfo region = server.getValue().get(idx);
        if (region.isMetaRegion()) continue; // Don't move meta regions.
        regionsToMove.add(new RegionPlan(region, server.getKey().getServerName(), null));
        totalNumMoved++;
        if (--neededRegions == 0) {
          // No more regions needed, done shedding
          break;
        }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.