Skip to content

Commit 164679b

Browse files
author
Ravindra Dingankar
committed
HDFS-16917 Add transfer rate quantile metrics for DataNode reads
1 parent d56977e commit 164679b

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

hadoop-common-project/hadoop-common/src/site/markdown/Metrics.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ Each metrics record contains tags such as SessionId and Hostname as additional i
370370
|:---- |:---- |
371371
| `BytesWritten` | Total number of bytes written to DataNode |
372372
| `BytesRead` | Total number of bytes read from DataNode |
373+
| `BytesReadTransferRate`*num*`s(50/75/90/95/99)thPercentileTransferRate` | The 50/75/90/95/99th percentile of the transfer rate of bytes read from the Data Node. The transfer rate is measured in bytes per millisecond. |
373374
| `BlocksWritten` | Total number of blocks written to DataNode |
374375
| `BlocksRead` | Total number of blocks read from DataNode |
375376
| `BlocksReplicated` | Total number of blocks replicated |

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,9 @@ public void readBlock(final ExtendedBlock block,
632632
datanode.metrics.incrBytesRead((int) read);
633633
datanode.metrics.incrBlocksRead();
634634
datanode.metrics.incrTotalReadTime(duration);
635+
if (duration != 0) {
636+
datanode.metrics.addBytesReadTransferRate(read / duration);
637+
}
635638
} catch ( SocketException ignored ) {
636639
LOG.trace("{}:Ignoring exception while serving {} to {}",
637640
dnR, block, remoteAddress, ignored);
@@ -1122,6 +1125,9 @@ public void copyBlock(final ExtendedBlock block,
11221125
datanode.metrics.incrBytesRead((int) read);
11231126
datanode.metrics.incrBlocksRead();
11241127
datanode.metrics.incrTotalReadTime(duration);
1128+
if (duration != 0) {
1129+
datanode.metrics.addBytesReadTransferRate(read / duration);
1130+
}
11251131

11261132
LOG.info("Copied {} to {}", block, peer.getRemoteAddressString());
11271133
} catch (IOException ioe) {

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/metrics/DataNodeMetrics.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public class DataNodeMetrics {
6161
@Metric MutableCounterLong bytesRead;
6262
@Metric("Milliseconds spent reading")
6363
MutableCounterLong totalReadTime;
64+
@Metric MutableRate bytesReadTransferRate;
65+
final MutableQuantiles[] bytesReadTransferRateQuantiles;
6466
@Metric MutableCounterLong blocksWritten;
6567
@Metric MutableCounterLong blocksRead;
6668
@Metric MutableCounterLong blocksReplicated;
@@ -227,6 +229,7 @@ public DataNodeMetrics(String name, String sessionId, int[] intervals,
227229
sendDataPacketTransferNanosQuantiles = new MutableQuantiles[len];
228230
ramDiskBlocksEvictionWindowMsQuantiles = new MutableQuantiles[len];
229231
ramDiskBlocksLazyPersistWindowMsQuantiles = new MutableQuantiles[len];
232+
bytesReadTransferRateQuantiles = new MutableQuantiles[len];
230233

231234
for (int i = 0; i < len; i++) {
232235
int interval = intervals[i];
@@ -255,6 +258,10 @@ public DataNodeMetrics(String name, String sessionId, int[] intervals,
255258
"ramDiskBlocksLazyPersistWindows" + interval + "s",
256259
"Time between the RamDisk block write and disk persist in ms",
257260
"ops", "latency", interval);
261+
bytesReadTransferRateQuantiles[i] = registry.newQuantiles(
262+
"bytesReadTransferRate" + interval + "s",
263+
"Rate at which bytes are read from Data Node",
264+
"ops", "transfer rate", interval);
258265
}
259266
}
260267

@@ -315,6 +322,13 @@ public void addIncrementalBlockReport(long latency,
315322
nnRpcLatency.add("IncrementalBlockReportsFor" + rpcMetricSuffix, latency);
316323
}
317324
}
325+
326+
public void addBytesReadTransferRate(long latencyMs) {
327+
bytesReadTransferRate.add(latencyMs);
328+
for (MutableQuantiles q : bytesReadTransferRateQuantiles) {
329+
q.add(latencyMs);
330+
}
331+
}
318332

319333
public void addCacheReport(long latency) {
320334
cacheReports.add(latency);

0 commit comments

Comments
 (0)