|
@@ -191,6 +191,8 @@ import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_AVOID_SLOW_DATAN
|
|
|
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_AVOID_SLOW_DATANODE_FOR_READ_DEFAULT;
|
|
|
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_BLOCKPLACEMENTPOLICY_EXCLUDE_SLOW_NODES_ENABLED_KEY;
|
|
|
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_BLOCKPLACEMENTPOLICY_EXCLUDE_SLOW_NODES_ENABLED_DEFAULT;
|
|
|
+import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_MAX_SLOWPEER_COLLECT_NODES_KEY;
|
|
|
+import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_MAX_SLOWPEER_COLLECT_NODES_DEFAULT;
|
|
|
|
|
|
import static org.apache.hadoop.util.ExitUtil.terminate;
|
|
|
import static org.apache.hadoop.util.ToolRunner.confirmPrompt;
|
|
@@ -334,7 +336,8 @@ public class NameNode extends ReconfigurableBase implements
|
|
|
DFS_BLOCK_PLACEMENT_EC_CLASSNAME_KEY,
|
|
|
DFS_IMAGE_PARALLEL_LOAD_KEY,
|
|
|
DFS_NAMENODE_AVOID_SLOW_DATANODE_FOR_READ_KEY,
|
|
|
- DFS_NAMENODE_BLOCKPLACEMENTPOLICY_EXCLUDE_SLOW_NODES_ENABLED_KEY));
|
|
|
+ DFS_NAMENODE_BLOCKPLACEMENTPOLICY_EXCLUDE_SLOW_NODES_ENABLED_KEY,
|
|
|
+ DFS_NAMENODE_MAX_SLOWPEER_COLLECT_NODES_KEY));
|
|
|
|
|
|
private static final String USAGE = "Usage: hdfs namenode ["
|
|
|
+ StartupOption.BACKUP.getName() + "] | \n\t["
|
|
@@ -2204,7 +2207,8 @@ public class NameNode extends ReconfigurableBase implements
|
|
|
} else if (property.equals(DFS_IMAGE_PARALLEL_LOAD_KEY)) {
|
|
|
return reconfigureParallelLoad(newVal);
|
|
|
} else if (property.equals(DFS_NAMENODE_AVOID_SLOW_DATANODE_FOR_READ_KEY)
|
|
|
- || (property.equals(DFS_NAMENODE_BLOCKPLACEMENTPOLICY_EXCLUDE_SLOW_NODES_ENABLED_KEY))) {
|
|
|
+ || (property.equals(DFS_NAMENODE_BLOCKPLACEMENTPOLICY_EXCLUDE_SLOW_NODES_ENABLED_KEY))
|
|
|
+ || (property.equals(DFS_NAMENODE_MAX_SLOWPEER_COLLECT_NODES_KEY))) {
|
|
|
return reconfigureSlowNodesParameters(datanodeManager, property, newVal);
|
|
|
} else {
|
|
|
throw new ReconfigurationException(property, newVal, getConf().get(
|
|
@@ -2396,24 +2400,32 @@ public class NameNode extends ReconfigurableBase implements
|
|
|
final String property, final String newVal) throws ReconfigurationException {
|
|
|
BlockManager bm = namesystem.getBlockManager();
|
|
|
namesystem.writeLock();
|
|
|
- boolean enable;
|
|
|
+ String result;
|
|
|
try {
|
|
|
if (property.equals(DFS_NAMENODE_AVOID_SLOW_DATANODE_FOR_READ_KEY)) {
|
|
|
- enable = (newVal == null ? DFS_NAMENODE_AVOID_SLOW_DATANODE_FOR_READ_DEFAULT :
|
|
|
+ boolean enable = (newVal == null ? DFS_NAMENODE_AVOID_SLOW_DATANODE_FOR_READ_DEFAULT :
|
|
|
Boolean.parseBoolean(newVal));
|
|
|
+ result = Boolean.toString(enable);
|
|
|
datanodeManager.setAvoidSlowDataNodesForReadEnabled(enable);
|
|
|
} else if (property.equals(
|
|
|
DFS_NAMENODE_BLOCKPLACEMENTPOLICY_EXCLUDE_SLOW_NODES_ENABLED_KEY)) {
|
|
|
- enable = (newVal == null ?
|
|
|
+ boolean enable = (newVal == null ?
|
|
|
DFS_NAMENODE_BLOCKPLACEMENTPOLICY_EXCLUDE_SLOW_NODES_ENABLED_DEFAULT :
|
|
|
Boolean.parseBoolean(newVal));
|
|
|
+ result = Boolean.toString(enable);
|
|
|
bm.setExcludeSlowNodesEnabled(enable);
|
|
|
+ } else if (property.equals(DFS_NAMENODE_MAX_SLOWPEER_COLLECT_NODES_KEY)) {
|
|
|
+ int maxSlowpeerCollectNodes = (newVal == null ?
|
|
|
+ DFS_NAMENODE_MAX_SLOWPEER_COLLECT_NODES_DEFAULT :
|
|
|
+ Integer.parseInt(newVal));
|
|
|
+ result = Integer.toString(maxSlowpeerCollectNodes);
|
|
|
+ datanodeManager.setMaxSlowpeerCollectNodes(maxSlowpeerCollectNodes);
|
|
|
} else {
|
|
|
throw new IllegalArgumentException("Unexpected property " +
|
|
|
property + " in reconfigureSlowNodesParameters");
|
|
|
}
|
|
|
LOG.info("RECONFIGURE* changed {} to {}", property, newVal);
|
|
|
- return Boolean.toString(enable);
|
|
|
+ return result;
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
throw new ReconfigurationException(property, newVal, getConf().get(
|
|
|
property), e);
|