@@ -20,8 +20,6 @@ package org.apache.spark.status
2020import java .lang .{Long => JLong }
2121import java .util .Date
2222
23- import scala .collection .mutable .HashSet
24-
2523import com .fasterxml .jackson .annotation .JsonIgnore
2624import com .fasterxml .jackson .databind .annotation .JsonDeserialize
2725
@@ -180,12 +178,10 @@ private[spark] class TaskDataWrapper(
180178 val accumulatorUpdates : Seq [AccumulableInfo ],
181179 val errorMessage : Option [String ],
182180
183- val hasMetrics : Boolean ,
184181 // Non successful metrics now will have negative values in `TaskDataWrapper`.
185182 // `TaskData` will have actual metric values. To recover the actual metric value
186- // from `TaskDataWrapper`, need use `getMetricValue` method. parameter `handleZero` is to
187- // check whether the index has zero metric value, which is used in the `getMetricValue`.
188- val handleZero : HashSet [String ],
183+ // from `TaskDataWrapper`, need use `getMetricValue` method.
184+ val hasMetrics : Boolean ,
189185 // The following is an exploded view of a TaskMetrics API object. This saves 5 objects
190186 // (= 80 bytes of Java object overhead) per instance of this wrapper. If the first value
191187 // (executorDeserializeTime) is -1L, it means the metrics for this task have not been
@@ -243,46 +239,45 @@ private[spark] class TaskDataWrapper(
243239 val stageAttemptId : Int ) {
244240
245241 // SPARK-26260: To handle non successful tasks metrics (Running, Failed, Killed).
246- private def getMetricValue (metric : Long , index : String ): Long = {
247- if (status != " SUCCESS" && handleZero(index) ) {
248- 0L
242+ private def getMetricValue (metric : Long ): Long = {
243+ if (status != " SUCCESS" ) {
244+ math.abs(metric + 1 )
249245 } else {
250- math.abs( metric)
246+ metric
251247 }
252248 }
253249
254250 def toApi : TaskData = {
255251 val metrics = if (hasMetrics) {
256252 Some (new TaskMetrics (
257- getMetricValue(executorDeserializeTime, TaskIndexNames . DESER_TIME ),
258- getMetricValue(executorDeserializeCpuTime, TaskIndexNames . DESER_CPU_TIME ),
259- getMetricValue(executorRunTime, TaskIndexNames . EXEC_RUN_TIME ),
260- getMetricValue(executorCpuTime, TaskIndexNames . EXEC_CPU_TIME ),
261- getMetricValue(resultSize, TaskIndexNames . RESULT_SIZE ),
262- getMetricValue(jvmGcTime, TaskIndexNames . GC_TIME ),
263- getMetricValue(resultSerializationTime, TaskIndexNames . SER_TIME ),
264- getMetricValue(memoryBytesSpilled, TaskIndexNames . MEM_SPILL ),
265- getMetricValue(diskBytesSpilled, TaskIndexNames . DISK_SPILL ),
266- getMetricValue(peakExecutionMemory, TaskIndexNames . PEAK_MEM ),
253+ getMetricValue(executorDeserializeTime),
254+ getMetricValue(executorDeserializeCpuTime),
255+ getMetricValue(executorRunTime),
256+ getMetricValue(executorCpuTime),
257+ getMetricValue(resultSize),
258+ getMetricValue(jvmGcTime),
259+ getMetricValue(resultSerializationTime),
260+ getMetricValue(memoryBytesSpilled),
261+ getMetricValue(diskBytesSpilled),
262+ getMetricValue(peakExecutionMemory),
267263 new InputMetrics (
268- getMetricValue(inputBytesRead, TaskIndexNames . INPUT_SIZE ),
269- getMetricValue(inputRecordsRead, TaskIndexNames . INPUT_RECORDS )),
264+ getMetricValue(inputBytesRead),
265+ getMetricValue(inputRecordsRead)),
270266 new OutputMetrics (
271- getMetricValue(outputBytesWritten, TaskIndexNames . OUTPUT_SIZE ),
272- getMetricValue(outputRecordsWritten, TaskIndexNames . OUTPUT_RECORDS )),
267+ getMetricValue(outputBytesWritten),
268+ getMetricValue(outputRecordsWritten)),
273269 new ShuffleReadMetrics (
274- getMetricValue(shuffleRemoteBlocksFetched, TaskIndexNames .SHUFFLE_REMOTE_BLOCKS ),
275- getMetricValue(shuffleLocalBlocksFetched, TaskIndexNames .SHUFFLE_LOCAL_BLOCKS ),
276- getMetricValue(shuffleFetchWaitTime, TaskIndexNames .SHUFFLE_READ_TIME ),
277- getMetricValue(shuffleRemoteBytesRead, TaskIndexNames .SHUFFLE_REMOTE_READS ),
278- getMetricValue(shuffleRemoteBytesReadToDisk,
279- TaskIndexNames .SHUFFLE_REMOTE_READS_TO_DISK ),
280- getMetricValue(shuffleLocalBytesRead, TaskIndexNames .SHUFFLE_LOCAL_READ ),
281- getMetricValue(shuffleRecordsRead, TaskIndexNames .SHUFFLE_READ_RECORDS )),
270+ getMetricValue(shuffleRemoteBlocksFetched),
271+ getMetricValue(shuffleLocalBlocksFetched),
272+ getMetricValue(shuffleFetchWaitTime),
273+ getMetricValue(shuffleRemoteBytesRead),
274+ getMetricValue(shuffleRemoteBytesReadToDisk),
275+ getMetricValue(shuffleLocalBytesRead),
276+ getMetricValue(shuffleRecordsRead)),
282277 new ShuffleWriteMetrics (
283- getMetricValue(shuffleBytesWritten, TaskIndexNames . SHUFFLE_WRITE_SIZE ),
284- getMetricValue(shuffleWriteTime, TaskIndexNames . SHUFFLE_WRITE_TIME ),
285- getMetricValue(shuffleRecordsWritten, TaskIndexNames . SHUFFLE_WRITE_RECORDS ))))
278+ getMetricValue(shuffleBytesWritten),
279+ getMetricValue(shuffleWriteTime),
280+ getMetricValue(shuffleRecordsWritten))))
286281 } else {
287282 None
288283 }
@@ -314,9 +309,9 @@ private[spark] class TaskDataWrapper(
314309 def schedulerDelay : Long = {
315310 if (hasMetrics) {
316311 AppStatusUtils .schedulerDelay(launchTime, resultFetchStart, duration,
317- getMetricValue(executorDeserializeTime, TaskIndexNames . DESER_TIME ),
318- getMetricValue(resultSerializationTime, TaskIndexNames . SER_TIME ),
319- getMetricValue(executorRunTime, TaskIndexNames . EXEC_RUN_TIME ))
312+ getMetricValue(executorDeserializeTime),
313+ getMetricValue(resultSerializationTime),
314+ getMetricValue(executorRunTime))
320315 } else {
321316 - 1L
322317 }
@@ -349,8 +344,7 @@ private[spark] class TaskDataWrapper(
349344 @ JsonIgnore @ KVIndex (value = TaskIndexNames .SHUFFLE_TOTAL_READS , parent = TaskIndexNames .STAGE )
350345 private def shuffleTotalReads : Long = {
351346 if (hasMetrics) {
352- getMetricValue(shuffleLocalBytesRead, TaskIndexNames .SHUFFLE_LOCAL_READ ) +
353- getMetricValue(shuffleRemoteBytesRead, TaskIndexNames .SHUFFLE_REMOTE_READS )
347+ getMetricValue(shuffleLocalBytesRead) + getMetricValue(shuffleRemoteBytesRead)
354348 } else {
355349 - 1L
356350 }
@@ -359,8 +353,7 @@ private[spark] class TaskDataWrapper(
359353 @ JsonIgnore @ KVIndex (value = TaskIndexNames .SHUFFLE_TOTAL_BLOCKS , parent = TaskIndexNames .STAGE )
360354 private def shuffleTotalBlocks : Long = {
361355 if (hasMetrics) {
362- getMetricValue(shuffleLocalBlocksFetched, TaskIndexNames .SHUFFLE_LOCAL_BLOCKS ) +
363- getMetricValue(shuffleRemoteBlocksFetched, TaskIndexNames .SHUFFLE_REMOTE_BLOCKS )
356+ getMetricValue(shuffleLocalBlocksFetched) + getMetricValue(shuffleRemoteBlocksFetched)
364357 } else {
365358 - 1L
366359 }
0 commit comments