diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java
index bf0ed14d2f..d04a8426e1 100755
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java
@@ -676,6 +676,14 @@ public class DFSConfigKeys extends CommonConfigurationKeys {
"dfs.datanode.slowpeer.low.threshold.ms";
public static final long DFS_DATANODE_SLOWPEER_LOW_THRESHOLD_MS_DEFAULT =
5L;
+ public static final String DFS_DATANODE_MIN_OUTLIER_DETECTION_DISKS_KEY =
+ "dfs.datanode.min.outlier.detection.disks";
+ public static final long DFS_DATANODE_MIN_OUTLIER_DETECTION_DISKS_DEFAULT =
+ 5L;
+ public static final String DFS_DATANODE_SLOWDISK_LOW_THRESHOLD_MS_KEY =
+ "dfs.datanode.slowdisk.low.threshold.ms";
+ public static final long DFS_DATANODE_SLOWDISK_LOW_THRESHOLD_MS_DEFAULT =
+ 20L;
public static final String DFS_DATANODE_HOST_NAME_KEY =
HdfsClientConfigKeys.DeprecatedKeys.DFS_DATANODE_HOST_NAME_KEY;
public static final String DFS_NAMENODE_CHECKPOINT_DIR_KEY =
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java
index b16fe44dca..742b815151 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java
@@ -1489,7 +1489,7 @@ public class DataNode extends ReconfigurableBase
if (dnConf.diskStatsEnabled) {
diskMetrics = new DataNodeDiskMetrics(this,
- dnConf.outliersReportIntervalMs);
+ dnConf.outliersReportIntervalMs, getConf());
}
}
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/metrics/DataNodeDiskMetrics.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/metrics/DataNodeDiskMetrics.java
index e431bde9f1..d0969f7c9b 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/metrics/DataNodeDiskMetrics.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/metrics/DataNodeDiskMetrics.java
@@ -17,6 +17,8 @@
*/
package org.apache.hadoop.hdfs.server.datanode.metrics;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.thirdparty.com.google.common.annotations.VisibleForTesting;
import org.apache.hadoop.thirdparty.com.google.common.collect.ImmutableMap;
import org.apache.hadoop.thirdparty.com.google.common.collect.Maps;
@@ -48,8 +50,6 @@ public class DataNodeDiskMetrics {
DataNodeDiskMetrics.class);
private DataNode dn;
- private final long MIN_OUTLIER_DETECTION_DISKS = 5;
- private final long SLOW_DISK_LOW_THRESHOLD_MS = 20;
private final long detectionInterval;
private volatile boolean shouldRun;
private OutlierDetector slowDiskDetector;
@@ -61,11 +61,27 @@ public class DataNodeDiskMetrics {
// code, status should not be overridden by daemon thread.
private boolean overrideStatus = true;
- public DataNodeDiskMetrics(DataNode dn, long diskOutlierDetectionIntervalMs) {
+ /**
+ * Minimum number of disks to run outlier detection.
+ */
+ private final long minOutlierDetectionDisks;
+ /**
+ * Threshold in milliseconds below which a disk is definitely not slow.
+ */
+ private final long lowThresholdMs;
+
+ public DataNodeDiskMetrics(DataNode dn, long diskOutlierDetectionIntervalMs,
+ Configuration conf) {
this.dn = dn;
this.detectionInterval = diskOutlierDetectionIntervalMs;
- slowDiskDetector = new OutlierDetector(MIN_OUTLIER_DETECTION_DISKS,
- SLOW_DISK_LOW_THRESHOLD_MS);
+ minOutlierDetectionDisks =
+ conf.getLong(DFSConfigKeys.DFS_DATANODE_MIN_OUTLIER_DETECTION_DISKS_KEY,
+ DFSConfigKeys.DFS_DATANODE_MIN_OUTLIER_DETECTION_DISKS_DEFAULT);
+ lowThresholdMs =
+ conf.getLong(DFSConfigKeys.DFS_DATANODE_SLOWDISK_LOW_THRESHOLD_MS_KEY,
+ DFSConfigKeys.DFS_DATANODE_SLOWDISK_LOW_THRESHOLD_MS_DEFAULT);
+ slowDiskDetector =
+ new OutlierDetector(minOutlierDetectionDisks, lowThresholdMs);
shouldRun = true;
startDiskOutlierDetectionThread();
}
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml b/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
index e13e000b8f..0c5bb35d76 100755
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
@@ -2370,6 +2370,22 @@
+
+ dfs.datanode.min.outlier.detection.disks
+ 5
+
+ Minimum number of disks to run outlier detection.
+
+
+
+
+ dfs.datanode.slowdisk.low.threshold.ms
+ 20
+
+ Threshold in milliseconds below which a disk is definitely not slow.
+
+
+
hadoop.user.group.metrics.percentiles.intervals