void generateInputs(int[] ignore) throws IOException { // start data-nodes; create a bunch of files; generate block reports. blockReportObject.generateInputs(ignore); // stop replication monitor nameNode.namesystem.replthread.interrupt(); try { nameNode.namesystem.replthread.join(); } catch (InterruptedException ei) { return; } // report blocks once int nrDatanodes = blockReportObject.getNumDatanodes(); for (int idx = 0; idx < nrDatanodes; idx++) { blockReportObject.executeOp(idx, 0, null); } // decommission data-nodes decommissionNodes(); // set node replication limit nameNode.namesystem.setNodeReplicationLimit(nodeReplicationLimit); }
private void decommissionNodes() throws IOException { String excludeFN = config.get("dfs.hosts.exclude", "exclude"); FileOutputStream excludeFile = new FileOutputStream(excludeFN); excludeFile.getChannel().truncate(0L); int nrDatanodes = blockReportObject.getNumDatanodes(); numDecommissionedBlocks = 0; for (int i = 0; i < nodesToDecommission; i++) { TinyDatanode dn = blockReportObject.datanodes[nrDatanodes - 1 - i]; numDecommissionedBlocks += dn.nrBlocks; excludeFile.write(dn.getName().getBytes()); excludeFile.write('\n'); LOG.info("Datanode " + dn.getName() + " is decommissioned."); } excludeFile.close(); nameNode.refreshNodes(); }
void printResults() { String blockDistribution = ""; String delim = "("; int totalReplicas = 0; for (int idx = 0; idx < blockReportObject.getNumDatanodes(); idx++) { totalReplicas += blockReportObject.datanodes[idx].nrBlocks; blockDistribution += delim + blockReportObject.datanodes[idx].nrBlocks; delim = ", "; } blockDistribution += ")"; LOG.info("--- " + getOpName() + " inputs ---"); LOG.info("numOpsRequired = " + numOpsRequired); LOG.info("datanodes = " + numDatanodes + " " + blockDistribution); LOG.info("decommissioned datanodes = " + nodesToDecommission); LOG.info("datanode replication limit = " + nodeReplicationLimit); LOG.info("total blocks = " + totalBlocks); printStats(); LOG.info("decommissioned blocks = " + numDecommissionedBlocks); LOG.info("pending replications = " + numPendingBlocks); LOG.info("replications per sec: " + getBlocksPerSecond()); }