Author: szetszwo
Date: Fri Jun 8 02:29:40 2012
New Revision: 1347867
URL: http://svn.apache.org/viewvc?rev=1347867&view=rev
Log:
HADOOP-8469. Make NetworkTopology class pluggable. Contributed by Junping Du
Modified:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java
Modified:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java?rev=1347867&r1=1347866&r2=1347867&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
(original)
+++
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
Fri Jun 8 02:29:40 2012
@@ -199,10 +199,10 @@ public class DatanodeInfo extends Datano
this.xceiverCount = xceiverCount;
}
- /** rack name */
+ /** network location */
public synchronized String getNetworkLocation() {return location;}
- /** Sets the rack name */
+ /** Sets the network location */
public synchronized void setNetworkLocation(String location) {
this.location = NodeBase.normalize(location);
}
Modified:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java?rev=1347867&r1=1347866&r2=1347867&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java
(original)
+++
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java
Fri Jun 8 02:29:40 2012
@@ -38,6 +38,7 @@ import org.apache.hadoop.HadoopIllegalAr
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.hdfs.HdfsConfiguration;
@@ -66,6 +67,8 @@ import org.apache.hadoop.ipc.Server;
import org.apache.hadoop.net.CachedDNSToSwitchMapping;
import org.apache.hadoop.net.DNSToSwitchMapping;
import org.apache.hadoop.net.NetworkTopology;
+import org.apache.hadoop.net.Node;
+import org.apache.hadoop.net.NodeBase;
import org.apache.hadoop.net.ScriptBasedMapping;
import org.apache.hadoop.util.Daemon;
import org.apache.hadoop.util.HostsFileReader;
@@ -108,7 +111,7 @@ public class DatanodeManager {
= new TreeMap<String, DatanodeDescriptor>();
/** Cluster network topology */
- private final NetworkTopology networktopology = new NetworkTopology();
+ private final NetworkTopology networktopology;
/** Host names to datanode descriptors mapping. */
private final Host2NodesMap host2DatanodeMap = new Host2NodesMap();
@@ -134,6 +137,12 @@ public class DatanodeManager {
) throws IOException {
this.namesystem = namesystem;
this.blockManager = blockManager;
+
+ Class<? extends NetworkTopology> networkTopologyClass =
+ conf.getClass(CommonConfigurationKeysPublic.NET_TOPOLOGY_IMPL_KEY,
+ NetworkTopology.class, NetworkTopology.class);
+ networktopology = (NetworkTopology) ReflectionUtils.newInstance(
+ networkTopologyClass, conf);
this.heartbeatManager = new HeartbeatManager(namesystem, blockManager,
conf);
@@ -206,13 +215,22 @@ public class DatanodeManager {
public void sortLocatedBlocks(final String targethost,
final List<LocatedBlock> locatedblocks) {
//sort the blocks
- final DatanodeDescriptor client = getDatanodeByHost(targethost);
+ // As it is possible for the separation of node manager and datanode,
+ // here we should get node but not datanode only .
+ Node client = getDatanodeByHost(targethost);
+ if (client == null) {
+ List<String> hosts = new ArrayList<String> (1);
+ hosts.add(targethost);
+ String rName = dnsToSwitchMapping.resolve(hosts).get(0);
+ if (rName != null)
+ client = new NodeBase(rName + NodeBase.PATH_SEPARATOR_STR +
targethost);
+ }
for (LocatedBlock b : locatedblocks) {
networktopology.pseudoSortByDistance(client, b.getLocations());
// Move decommissioned datanodes to the bottom
Arrays.sort(b.getLocations(), DFSUtil.DECOM_COMPARATOR);
- }
+ }
}
CyclicIteration<String, DatanodeDescriptor> getDatanodeCyclicIteration(