- DAG visualization
+
+ DAG Visualization
+
'
|}
""".stripMargin
jobEventJsonAsStr
@@ -179,13 +183,15 @@ private[ui] class AllJobsPage(parent: JobsTab) extends WebUIPage("") {
- Event timeline
+
+ Event Timeline
+
++
++
@@ -283,7 +289,7 @@ private[ui] class AllJobsPage(parent: JobsTab) extends WebUIPage("") {
{if (parent.sc.isDefined) {
// Total duration is not meaningful unless the UI is live
- Total Duration:
+ Total Uptime:
{UIUtils.formatDuration(System.currentTimeMillis() - startTime)}
}}
@@ -336,9 +342,8 @@ private[ui] class AllJobsPage(parent: JobsTab) extends WebUIPage("") {
failedJobsTable
}
- val helpText = """A job is triggered by an action, like "count()" or "saveAsTextFile()".""" +
- " Click on a job's title to see information about the stages of tasks associated with" +
- " the job."
+ val helpText = """A job is triggered by an action, like count() or saveAsTextFile().""" +
+ " Click on a job to see information about the stages of tasks inside it."
UIUtils.headerSparkPage("Spark Jobs", content, parent, helpText = Some(helpText))
}
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/AllStagesPage.scala b/core/src/main/scala/org/apache/spark/ui/jobs/AllStagesPage.scala
index a37f739ab9c66..5e52942b64f3f 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/AllStagesPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/AllStagesPage.scala
@@ -73,19 +73,6 @@ private[ui] class AllStagesPage(parent: StagesTab) extends WebUIPage("") {
val summary: NodeSeq =
',
|}
""".stripMargin
}
@@ -161,13 +164,15 @@ private[ui] class JobPage(parent: JobsTab) extends WebUIPage("job") {
- Event timeline
+
+ Event Timeline
+
++
++
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 89d175b06b947..8f7b1c2f09665 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
@@ -44,6 +44,10 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
val parameterAttempt = request.getParameter("attempt")
require(parameterAttempt != null && parameterAttempt.nonEmpty, "Missing attempt parameter")
+ // If this is set, expand the dag visualization by default
+ val expandDagVizParam = request.getParameter("expandDagViz")
+ val expandDagViz = expandDagVizParam != null && expandDagVizParam.toBoolean
+
val stageId = parameterId.toInt
val stageAttemptId = parameterAttempt.toInt
val stageDataOption = progressListener.stageIdToData.get((stageId, stageAttemptId))
@@ -77,7 +81,7 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
-
- Total task time across all tasks:
+ Total Time Across All Tasks:
{UIUtils.formatDuration(stageData.executorRunTime)}
{if (stageData.hasInput) {
@@ -94,25 +98,25 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
}}
{if (stageData.hasShuffleRead) {
-
- Shuffle read:
+ Shuffle Read:
{s"${Utils.bytesToString(stageData.shuffleReadTotalBytes)} / " +
s"${stageData.shuffleReadRecords}"}
}}
{if (stageData.hasShuffleWrite) {
-
- Shuffle write:
+ Shuffle Write:
{s"${Utils.bytesToString(stageData.shuffleWriteBytes)} / " +
s"${stageData.shuffleWriteRecords}"}
}}
{if (stageData.hasBytesSpilled) {
-
- Shuffle spill (memory):
+ Shuffle Spill (Memory):
{Utils.bytesToString(stageData.memoryBytesSpilled)}
-
- Shuffle spill (disk):
+ Shuffle Spill (Disk):
{Utils.bytesToString(stageData.diskBytesSpilled)}
}}
@@ -123,10 +127,10 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {