diff --git src/main/java/org/apache/hadoop/hbase/HRegionLocation.java src/main/java/org/apache/hadoop/hbase/HRegionLocation.java index 2910ccb..85fb91d 100644 --- src/main/java/org/apache/hadoop/hbase/HRegionLocation.java +++ src/main/java/org/apache/hadoop/hbase/HRegionLocation.java @@ -94,10 +94,12 @@ public class HRegionLocation implements Comparable { return regionInfo; } - /** @return HServerAddress + /** + * Do not use!!! Creates a HServerAddress instance which will do a resolve. + * @return HServerAddress * @deprecated Use {@link #getHostnamePort} */ - public HServerAddress getServerAddress(){ + public HServerAddress getServerAddress() { return new HServerAddress(this.hostname, this.port); } diff --git src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java index aa09b7d..c74c204 100644 --- src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java +++ src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java @@ -35,7 +35,6 @@ import java.util.NoSuchElementException; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; -import java.util.TreeSet; import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; @@ -1122,7 +1121,7 @@ public class HConnectionManager { if (tableLocations.put(startKey, location) == null) { LOG.debug("Cached location for " + location.getRegionInfo().getRegionNameAsString() + - " is " + location.getServerAddress()); + " is " + location.getHostnamePort()); } } diff --git src/main/java/org/apache/hadoop/hbase/client/ServerCallable.java src/main/java/org/apache/hadoop/hbase/client/ServerCallable.java index 2546e35..816f8b7 100644 --- src/main/java/org/apache/hadoop/hbase/client/ServerCallable.java +++ src/main/java/org/apache/hadoop/hbase/client/ServerCallable.java @@ -20,18 +20,15 @@ package org.apache.hadoop.hbase.client; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import java.io.IOException; +import java.net.SocketTimeoutException; +import java.util.concurrent.Callable; + import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.ipc.HBaseRPC; import org.apache.hadoop.hbase.ipc.HRegionInterface; import org.apache.hadoop.hbase.util.Bytes; -import org.apache.hadoop.io.retry.RetryPolicy; - -import java.io.IOException; -import java.net.SocketTimeoutException; -import java.util.concurrent.Callable; /** * Abstract class that implements Callable, used by retryable actions. @@ -68,7 +65,8 @@ public abstract class ServerCallable implements Callable { */ public void instantiateServer(boolean reload) throws IOException { this.location = connection.getRegionLocation(tableName, row, reload); - this.server = connection.getHRegionConnection(location.getServerAddress()); + this.server = connection.getHRegionConnection(location.getHostname(), + location.getPort()); } /** @return the server name */ @@ -76,7 +74,7 @@ public abstract class ServerCallable implements Callable { if (location == null) { return null; } - return location.getServerAddress().toString(); + return location.getHostnamePort(); } /** @return the region name */ diff --git src/main/java/org/apache/hadoop/hbase/mapred/TableInputFormatBase.java src/main/java/org/apache/hadoop/hbase/mapred/TableInputFormatBase.java index b862eea..a959e5d 100644 --- src/main/java/org/apache/hadoop/hbase/mapred/TableInputFormatBase.java +++ src/main/java/org/apache/hadoop/hbase/mapred/TableInputFormatBase.java @@ -135,7 +135,7 @@ implements InputFormat { int lastPos = startPos + middle; lastPos = startKeys.length % realNumSplits > i ? lastPos + 1 : lastPos; String regionLocation = table.getRegionLocation(startKeys[startPos]). - getServerAddress().getHostname(); + getHostname(); splits[i] = new TableSplit(this.table.getTableName(), startKeys[startPos], ((i + 1) < realNumSplits) ? startKeys[lastPos]: HConstants.EMPTY_START_ROW, regionLocation); diff --git src/main/java/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.java src/main/java/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.java index c813c49..0b938ef 100644 --- src/main/java/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.java +++ src/main/java/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.java @@ -141,7 +141,7 @@ extends InputFormat { continue; } String regionLocation = table.getRegionLocation(keys.getFirst()[i]). - getServerAddress().getHostname(); + getHostname(); byte[] startRow = scan.getStartRow(); byte[] stopRow = scan.getStopRow(); // determine if the given start an stop key fall into the region diff --git src/main/java/org/apache/hadoop/hbase/util/RegionSplitter.java src/main/java/org/apache/hadoop/hbase/util/RegionSplitter.java index 9a7539b..e4cf9bc 100644 --- src/main/java/org/apache/hadoop/hbase/util/RegionSplitter.java +++ src/main/java/org/apache/hadoop/hbase/util/RegionSplitter.java @@ -49,8 +49,8 @@ import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HRegionLocation; -import org.apache.hadoop.hbase.HServerAddress; import org.apache.hadoop.hbase.HTableDescriptor; +import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.NoServerForRegionException; @@ -373,11 +373,11 @@ public class RegionSplitter { // requests to the same RS can stall the outstanding split queue. // To fix, group the regions into an RS pool and round-robin through it LOG.debug("Bucketing regions by regionserver..."); - TreeMap>> daughterRegions = Maps - .newTreeMap(); + TreeMap>> daughterRegions = + Maps.newTreeMap(); for (Pair dr : tmpRegionSet) { - HServerAddress rsLocation = table.getRegionLocation(dr.getSecond()) - .getServerAddress(); + String rsLocation = table.getRegionLocation(dr.getSecond()). + getHostnamePort(); if (!daughterRegions.containsKey(rsLocation)) { LinkedList> entry = Lists.newLinkedList(); daughterRegions.put(rsLocation, entry); @@ -401,9 +401,9 @@ public class RegionSplitter { LOG.debug(daughterRegions.size() + " RS have regions to splt."); // Get RegionServer : region count mapping - final TreeMap rsSizes = Maps.newTreeMap(); - Map regionsInfo = table.getRegionsInfo(); - for (HServerAddress rs : regionsInfo.values()) { + final TreeMap rsSizes = Maps.newTreeMap(); + Map regionsInfo = table.getRegionLocations(); + for (ServerName rs : regionsInfo.values()) { if (rsSizes.containsKey(rs)) { rsSizes.put(rs, rsSizes.get(rs) + 1); } else { @@ -412,17 +412,16 @@ public class RegionSplitter { } // sort the RS by the number of regions they have - List serversLeft = Lists.newArrayList(daughterRegions - .keySet()); - Collections.sort(serversLeft, new Comparator() { - public int compare(HServerAddress o1, HServerAddress o2) { + List serversLeft = Lists.newArrayList(daughterRegions .keySet()); + Collections.sort(serversLeft, new Comparator() { + public int compare(String o1, String o2) { return rsSizes.get(o1).compareTo(rsSizes.get(o2)); } }); // round-robin through the RS list. Choose the lightest-loaded servers // first to keep the master from load-balancing regions as we split. - for (HServerAddress rsLoc : serversLeft) { + for (String rsLoc : serversLeft) { Pair dr = null; // find a region in the RS list that hasn't been moved @@ -437,7 +436,7 @@ public class RegionSplitter { HRegionLocation regionLoc = table.getRegionLocation(split); // if this region moved locations - HServerAddress newRs = regionLoc.getServerAddress(); + String newRs = regionLoc.getHostnamePort(); if (newRs.compareTo(rsLoc) != 0) { LOG.debug("Region with " + splitAlgo.rowToStr(split) + " moved to " + newRs + ". Relocating...");