aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorKay Ousterhout <kayousterhout@gmail.com>2015-03-24 16:26:43 -0700
committerAndrew Or <andrew@databricks.com>2015-03-24 16:26:43 -0700
commit6948ab6f8ba836446b005f2cf1cc4abc944c5053 (patch)
tree32ca6bc559ad9cdda5097bb6f90fedcd31d20f3d /core
parent73348012d4ce6c9db85dfb48d51026efe5051c73 (diff)
downloadspark-6948ab6f8ba836446b005f2cf1cc4abc944c5053.tar.gz
spark-6948ab6f8ba836446b005f2cf1cc4abc944c5053.tar.bz2
spark-6948ab6f8ba836446b005f2cf1cc4abc944c5053.zip
[SPARK-6088] Correct how tasks that get remote results are shown in UI.
It would be great to fix this for 1.3. since the fix is surgical and it helps understandability for users. cc shivaram pwendell Author: Kay Ousterhout <kayousterhout@gmail.com> Closes #4839 from kayousterhout/SPARK-6088 and squashes the following commits: 3ab012c [Kay Ousterhout] Update getting result time incrementally, correctly set GET_RESULT status f346b49 [Kay Ousterhout] Typos 748ea6b [Kay Ousterhout] Fixed build failure 84d617c [Kay Ousterhout] [SPARK-6088] Correct how tasks that get remote results are shown in the UI.
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/org/apache/spark/scheduler/TaskInfo.scala8
-rw-r--r--core/src/main/scala/org/apache/spark/ui/jobs/StagePage.scala25
2 files changed, 23 insertions, 10 deletions
diff --git a/core/src/main/scala/org/apache/spark/scheduler/TaskInfo.scala b/core/src/main/scala/org/apache/spark/scheduler/TaskInfo.scala
index 6fa1f2c880..132a9ced77 100644
--- a/core/src/main/scala/org/apache/spark/scheduler/TaskInfo.scala
+++ b/core/src/main/scala/org/apache/spark/scheduler/TaskInfo.scala
@@ -81,9 +81,11 @@ class TaskInfo(
def status: String = {
if (running) {
- "RUNNING"
- } else if (gettingResult) {
- "GET RESULT"
+ if (gettingResult) {
+ "GET RESULT"
+ } else {
+ "RUNNING"
+ }
} else if (failed) {
"FAILED"
} else if (successful) {
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/StagePage.scala b/core/src/main/scala/org/apache/spark/ui/jobs/StagePage.scala
index e03442894c..797c9404bc 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/StagePage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/StagePage.scala
@@ -269,11 +269,7 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
</td> +: getFormattedTimeQuantiles(serializationTimes)
val gettingResultTimes = validTasks.map { case TaskUIData(info, _, _) =>
- if (info.gettingResultTime > 0) {
- (info.finishTime - info.gettingResultTime).toDouble
- } else {
- 0.0
- }
+ getGettingResultTime(info).toDouble
}
val gettingResultQuantiles =
<td>
@@ -464,7 +460,7 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
val gcTime = metrics.map(_.jvmGCTime).getOrElse(0L)
val taskDeserializationTime = metrics.map(_.executorDeserializeTime).getOrElse(0L)
val serializationTime = metrics.map(_.resultSerializationTime).getOrElse(0L)
- val gettingResultTime = info.gettingResultTime
+ val gettingResultTime = getGettingResultTime(info)
val maybeAccumulators = info.accumulables
val accumulatorsReadable = maybeAccumulators.map{acc => s"${acc.name}: ${acc.update.get}"}
@@ -627,6 +623,19 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
<td>{errorSummary}{details}</td>
}
+ private def getGettingResultTime(info: TaskInfo): Long = {
+ if (info.gettingResultTime > 0) {
+ if (info.finishTime > 0) {
+ info.finishTime - info.gettingResultTime
+ } else {
+ // The task is still fetching the result.
+ System.currentTimeMillis - info.gettingResultTime
+ }
+ } else {
+ 0L
+ }
+ }
+
private def getSchedulerDelay(info: TaskInfo, metrics: TaskMetrics): Long = {
val totalExecutionTime =
if (info.gettingResult) {
@@ -638,6 +647,8 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
}
val executorOverhead = (metrics.executorDeserializeTime +
metrics.resultSerializationTime)
- math.max(0, totalExecutionTime - metrics.executorRunTime - executorOverhead)
+ math.max(
+ 0,
+ totalExecutionTime - metrics.executorRunTime - executorOverhead - getGettingResultTime(info))
}
}