|
@@ -20,6 +20,8 @@ package org.apache.hadoop.hdfs.server.blockmanagement;
|
|
|
|
|
|
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_KEY;
|
|
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_KEY;
|
|
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_DEFAULT;
|
|
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_DEFAULT;
|
|
|
|
+import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_TOLERANCE_DEFAULT;
|
|
|
|
+import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_TOLERANCE_KEY;
|
|
|
|
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
import java.util.EnumMap;
|
|
import java.util.EnumMap;
|
|
@@ -47,6 +49,8 @@ public class AvailableSpaceBlockPlacementPolicy extends
|
|
private static final Random RAND = new Random();
|
|
private static final Random RAND = new Random();
|
|
private int balancedPreference =
|
|
private int balancedPreference =
|
|
(int) (100 * DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_DEFAULT);
|
|
(int) (100 * DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_DEFAULT);
|
|
|
|
+ private int balancedSpaceTolerance =
|
|
|
|
+ DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_TOLERANCE_DEFAULT;
|
|
private boolean optimizeLocal;
|
|
private boolean optimizeLocal;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -59,9 +63,14 @@ public class AvailableSpaceBlockPlacementPolicy extends
|
|
DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_DEFAULT);
|
|
DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_DEFAULT);
|
|
|
|
|
|
LOG.info("Available space block placement policy initialized: "
|
|
LOG.info("Available space block placement policy initialized: "
|
|
- + DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_KEY
|
|
|
|
|
|
+ + DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_PREFERENCE_FRACTION_KEY
|
|
+ " = " + balancedPreferencePercent);
|
|
+ " = " + balancedPreferencePercent);
|
|
|
|
|
|
|
|
+ balancedSpaceTolerance =
|
|
|
|
+ conf.getInt(
|
|
|
|
+ DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_TOLERANCE_KEY,
|
|
|
|
+ DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_TOLERANCE_DEFAULT);
|
|
|
|
+
|
|
optimizeLocal = conf.getBoolean(
|
|
optimizeLocal = conf.getBoolean(
|
|
DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCE_LOCAL_NODE_KEY,
|
|
DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCE_LOCAL_NODE_KEY,
|
|
DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCE_LOCAL_NODE_DEFAULT);
|
|
DFSConfigKeys.DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCE_LOCAL_NODE_DEFAULT);
|
|
@@ -77,6 +86,16 @@ public class AvailableSpaceBlockPlacementPolicy extends
|
|
+ " is less than 0.5 so datanodes with more used percent will"
|
|
+ " is less than 0.5 so datanodes with more used percent will"
|
|
+ " receive more block allocations.");
|
|
+ " receive more block allocations.");
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (balancedSpaceTolerance > 20 || balancedSpaceTolerance < 0) {
|
|
|
|
+ LOG.warn("The value of "
|
|
|
|
+ + DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_TOLERANCE_KEY
|
|
|
|
+ + " is invalid, Current value is " + balancedSpaceTolerance + ", Default value " +
|
|
|
|
+ DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_TOLERANCE_DEFAULT
|
|
|
|
+ + " will be used instead.");
|
|
|
|
+ balancedSpaceTolerance =
|
|
|
|
+ DFS_NAMENODE_AVAILABLE_SPACE_BLOCK_PLACEMENT_POLICY_BALANCED_SPACE_TOLERANCE_DEFAULT;
|
|
|
|
+ }
|
|
balancedPreference = (int) (100 * balancedPreferencePercent);
|
|
balancedPreference = (int) (100 * balancedPreferencePercent);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -183,7 +202,7 @@ public class AvailableSpaceBlockPlacementPolicy extends
|
|
protected int compareDataNode(final DatanodeDescriptor a,
|
|
protected int compareDataNode(final DatanodeDescriptor a,
|
|
final DatanodeDescriptor b, boolean isBalanceLocal) {
|
|
final DatanodeDescriptor b, boolean isBalanceLocal) {
|
|
if (a.equals(b)
|
|
if (a.equals(b)
|
|
- || Math.abs(a.getDfsUsedPercent() - b.getDfsUsedPercent()) < 5 || ((
|
|
|
|
|
|
+ || Math.abs(a.getDfsUsedPercent() - b.getDfsUsedPercent()) < balancedSpaceTolerance || ((
|
|
isBalanceLocal && a.getDfsUsedPercent() < 50))) {
|
|
isBalanceLocal && a.getDfsUsedPercent() < 50))) {
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|