|
@@ -1173,10 +1173,28 @@ public class NNThroughputBenchmark implements Tool {
|
|
|
|
|
|
private ExtendedBlock addBlocks(String fileName, String clientName)
|
|
|
throws IOException {
|
|
|
+ DatanodeInfo[] excludeNodes = null;
|
|
|
+ DatanodeInfo[] dnInfos = clientProto.getDatanodeReport(
|
|
|
+ HdfsConstants.DatanodeReportType.LIVE);
|
|
|
+ if (dnInfos != null && dnInfos.length > 0) {
|
|
|
+ List<DatanodeInfo> tmpNodes = new ArrayList<>();
|
|
|
+ String localHost = DNS.getDefaultHost("default", "default");
|
|
|
+ for (DatanodeInfo dnInfo : dnInfos) {
|
|
|
+ if (!localHost.equals(dnInfo.getHostName()) ||
|
|
|
+ (dnInfo.getXferPort() > datanodes.length)) {
|
|
|
+ tmpNodes.add(dnInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (tmpNodes.size() > 0) {
|
|
|
+ excludeNodes = tmpNodes.toArray(new DatanodeInfo[tmpNodes.size()]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
ExtendedBlock prevBlock = null;
|
|
|
for(int jdx = 0; jdx < blocksPerFile; jdx++) {
|
|
|
LocatedBlock loc = addBlock(fileName, clientName,
|
|
|
- prevBlock, null, HdfsConstants.GRANDFATHER_INODE_ID, null);
|
|
|
+ prevBlock, excludeNodes, HdfsConstants.GRANDFATHER_INODE_ID, null);
|
|
|
prevBlock = loc.getBlock();
|
|
|
for(DatanodeInfo dnInfo : loc.getLocations()) {
|
|
|
int dnIdx = dnInfo.getXferPort() - 1;
|