diff --git a/core/src/main/resources/org/apache/spark/ui/static/webui.js b/core/src/main/resources/org/apache/spark/ui/static/webui.js
index 0fa1fcf25f8b..e575c4c78970 100644
--- a/core/src/main/resources/org/apache/spark/ui/static/webui.js
+++ b/core/src/main/resources/org/apache/spark/ui/static/webui.js
@@ -50,4 +50,34 @@ function collapseTable(thisName, table){
// to remember if it's collapsed on each page reload
$(function() {
collapseTablePageLoad('collapse-aggregated-metrics','aggregated-metrics');
+ collapseTablePageLoad('collapse-aggregated-executors','aggregated-executors');
+ collapseTablePageLoad('collapse-aggregated-removedExecutors','aggregated-removedExecutors');
+ collapseTablePageLoad('collapse-aggregated-workers','aggregated-workers');
+ collapseTablePageLoad('collapse-aggregated-activeApps','aggregated-activeApps');
+ collapseTablePageLoad('collapse-aggregated-activeDrivers','aggregated-activeDrivers');
+ collapseTablePageLoad('collapse-aggregated-completedApps','aggregated-completedApps');
+ collapseTablePageLoad('collapse-aggregated-completedDrivers','aggregated-completedDrivers');
+ collapseTablePageLoad('collapse-aggregated-runningExecutors','aggregated-runningExecutors');
+ collapseTablePageLoad('collapse-aggregated-runningDrivers','aggregated-runningDrivers');
+ collapseTablePageLoad('collapse-aggregated-finishedExecutors','aggregated-finishedExecutors');
+ collapseTablePageLoad('collapse-aggregated-finishedDrivers','aggregated-finishedDrivers');
+ collapseTablePageLoad('collapse-aggregated-runtimeInformation','aggregated-runtimeInformation');
+ collapseTablePageLoad('collapse-aggregated-sparkProperties','aggregated-sparkProperties');
+ collapseTablePageLoad('collapse-aggregated-systemProperties','aggregated-systemProperties');
+ collapseTablePageLoad('collapse-aggregated-classpathEntries','aggregated-classpathEntries');
+ collapseTablePageLoad('collapse-aggregated-activeJobs','aggregated-activeJobs');
+ collapseTablePageLoad('collapse-aggregated-completedJobs','aggregated-completedJobs');
+ collapseTablePageLoad('collapse-aggregated-failedJobs','aggregated-failedJobs');
+ collapseTablePageLoad('collapse-aggregated-poolTable','aggregated-poolTable');
+ collapseTablePageLoad('collapse-aggregated-allActiveStages','aggregated-allActiveStages');
+ collapseTablePageLoad('collapse-aggregated-allPendingStages','aggregated-allPendingStages');
+ collapseTablePageLoad('collapse-aggregated-allCompletedStages','aggregated-allCompletedStages');
+ collapseTablePageLoad('collapse-aggregated-allFailedStages','aggregated-allFailedStages');
+ collapseTablePageLoad('collapse-aggregated-activeStages','aggregated-activeStages');
+ collapseTablePageLoad('collapse-aggregated-pendingOrSkippedStages','aggregated-pendingOrSkippedStages');
+ collapseTablePageLoad('collapse-aggregated-completedStages','aggregated-completedStages');
+ collapseTablePageLoad('collapse-aggregated-failedStages','aggregated-failedStages');
+ collapseTablePageLoad('collapse-aggregated-poolActiveStages','aggregated-poolActiveStages');
+ collapseTablePageLoad('collapse-aggregated-tasks','aggregated-tasks');
+ collapseTablePageLoad('collapse-aggregated-rdds','aggregated-rdds');
});
\ No newline at end of file
diff --git a/core/src/main/scala/org/apache/spark/deploy/master/ui/ApplicationPage.scala b/core/src/main/scala/org/apache/spark/deploy/master/ui/ApplicationPage.scala
index 68e57b7564ad..f699c75085fe 100644
--- a/core/src/main/scala/org/apache/spark/deploy/master/ui/ApplicationPage.scala
+++ b/core/src/main/scala/org/apache/spark/deploy/master/ui/ApplicationPage.scala
@@ -100,12 +100,29 @@ private[ui] class ApplicationPage(parent: MasterWebUI) extends WebUIPage("app")
-
Running Executors ({runningExecutors.size})
- {runningExecutorTable}
+
+
+
+
+ {runningExecutorTable}
+
{
if (runningDrivers.nonEmpty) {
-
Running Drivers ({runningDrivers.size})
++
- runningDriverTable
+
+
+ ++
+
+ {runningDriverTable}
+
}
}
{
if (finishedExecutors.nonEmpty) {
-
Finished Executors ({finishedExecutors.size})
++
- finishedExecutorTable
+
+
+ ++
+
+ {finishedExecutorTable}
+
}
}
{
if (finishedDrivers.nonEmpty) {
-
Finished Drivers ({finishedDrivers.size})
++
- finishedDriverTable
+
+
+ ++
+
+ {finishedDriverTable}
+
}
}
diff --git a/core/src/main/scala/org/apache/spark/ui/env/EnvironmentPage.scala b/core/src/main/scala/org/apache/spark/ui/env/EnvironmentPage.scala
index 43adab7a35d6..902eb92b854f 100644
--- a/core/src/main/scala/org/apache/spark/ui/env/EnvironmentPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/env/EnvironmentPage.scala
@@ -48,10 +48,50 @@ private[ui] class EnvironmentPage(
classPathHeaders, classPathRow, appEnv.classpathEntries, fixedWidth = true)
val content =
- Runtime Information
{runtimeInformationTable}
- Spark Properties
{sparkPropertiesTable}
- System Properties
{systemPropertiesTable}
- Classpath Entries
{classpathEntriesTable}
+
+
+
+
+ {runtimeInformationTable}
+
+
+
+
+
+ {sparkPropertiesTable}
+
+
+
+
+
+ {systemPropertiesTable}
+
+
+
+
+
+ {classpathEntriesTable}
+
UIUtils.headerSparkPage("Environment", content, parent)
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala b/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
index 37e3b3b304a6..6b2a3812b190 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
@@ -365,16 +365,43 @@ private[ui] class AllJobsPage(parent: JobsTab, store: AppStatusStore) extends We
store.executorList(false), startTime)
if (shouldShowActiveJobs) {
- content ++=
Active Jobs ({activeJobs.size})
++
- activeJobsTable
+ content ++=
+
+
+ ++
+
+ {activeJobsTable}
+
}
if (shouldShowCompletedJobs) {
- content ++=
Completed Jobs ({completedJobNumStr})
++
- completedJobsTable
+ content ++=
+
+
+ ++
+
+ {completedJobsTable}
+
}
if (shouldShowFailedJobs) {
- content ++=
Failed Jobs ({failedJobs.size})
++
- failedJobsTable
+ content ++=
+
+
+ ++
+
+ {failedJobsTable}
+
}
val helpText = """A job is triggered by an action, like count() or saveAsTextFile().""" +
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 b1e343451e28..606dc1e180e5 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
@@ -116,26 +116,75 @@ private[ui] class AllStagesPage(parent: StagesTab) extends WebUIPage("") {
var content = summary ++
{
if (sc.isDefined && isFairScheduler) {
-
Fair Scheduler Pools ({pools.size})
++ poolTable.toNodeSeq
+
+
+ ++
+
+ {poolTable.toNodeSeq}
+
} else {
Seq.empty[Node]
}
}
if (shouldShowActiveStages) {
- content ++=
Active Stages ({activeStages.size})
++
- activeStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {activeStagesTable.toNodeSeq}
+
}
if (shouldShowPendingStages) {
- content ++=
Pending Stages ({pendingStages.size})
++
- pendingStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {pendingStagesTable.toNodeSeq}
+
}
if (shouldShowCompletedStages) {
- content ++=
Completed Stages ({completedStageNumStr})
++
- completedStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {completedStagesTable.toNodeSeq}
+
}
if (shouldShowFailedStages) {
- content ++=
Failed Stages ({numFailedStages})
++
- failedStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {failedStagesTable.toNodeSeq}
+
}
UIUtils.headerSparkPage("Stages for All Jobs", content, parent)
}
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala b/core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala
index 740f12e7d13d..5747df51d2d9 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala
@@ -340,24 +340,72 @@ private[ui] class JobPage(parent: JobsTab, store: AppStatusStore) extends WebUIP
jobId, store.operationGraphForJob(jobId))
if (shouldShowActiveStages) {
- content ++=
Active Stages ({activeStages.size})
++
- activeStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {activeStagesTable.toNodeSeq}
+
}
if (shouldShowPendingStages) {
- content ++=
Pending Stages ({pendingOrSkippedStages.size})
++
- pendingOrSkippedStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {pendingOrSkippedStagesTable.toNodeSeq}
+
}
if (shouldShowCompletedStages) {
- content ++=
Completed Stages ({completedStages.size})
++
- completedStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {completedStagesTable.toNodeSeq}
+
}
if (shouldShowSkippedStages) {
- content ++=
Skipped Stages ({pendingOrSkippedStages.size})
++
- pendingOrSkippedStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {pendingOrSkippedStagesTable.toNodeSeq}
+
}
if (shouldShowFailedStages) {
- content ++=
Failed Stages ({failedStages.size})
++
- failedStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {failedStagesTable.toNodeSeq}
+
}
UIUtils.headerSparkPage(s"Details for Job $jobId", content, parent, showVisualization = true)
}
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/PoolPage.scala b/core/src/main/scala/org/apache/spark/ui/jobs/PoolPage.scala
index 98fbd7aceaa1..a3e1f13782e3 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/PoolPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/PoolPage.scala
@@ -51,7 +51,18 @@ private[ui] class PoolPage(parent: StagesTab) extends WebUIPage("pool") {
val poolTable = new PoolTable(Map(pool -> uiPool), parent)
var content =
Summary
++ poolTable.toNodeSeq
if (activeStages.nonEmpty) {
- content ++=
Active Stages ({activeStages.size})
++ activeStagesTable.toNodeSeq
+ content ++=
+
+
+ ++
+
+ {activeStagesTable.toNodeSeq}
+
}
UIUtils.headerSparkPage("Fair Scheduler Pool: " + poolName, content, parent)
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 11a6a3434497..73d867bfbd74 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
@@ -556,8 +556,16 @@ private[ui] class StagePage(parent: StagesTab, store: AppStatusStore) extends We
{summaryTable.getOrElse("No tasks have reported metrics yet.")}
++
aggMetrics ++
maybeAccumulableTable ++
-
Tasks ({totalTasksNumStr})
++
- taskTableHTML ++ jsForScrollingDownToTaskTable
+
+
+ ++
+
+ {taskTableHTML ++ jsForScrollingDownToTaskTable}
+
UIUtils.headerSparkPage(stageHeader, content, parent, showVisualization = true)
}
diff --git a/core/src/main/scala/org/apache/spark/ui/storage/StoragePage.scala b/core/src/main/scala/org/apache/spark/ui/storage/StoragePage.scala
index b8aec9890247..68d946574a37 100644
--- a/core/src/main/scala/org/apache/spark/ui/storage/StoragePage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/storage/StoragePage.scala
@@ -41,8 +41,16 @@ private[ui] class StoragePage(parent: SparkUITab, store: AppStatusStore) extends
Nil
} else {
-
RDDs
- {UIUtils.listingTable(rddHeader, rddRow, rdds, id = Some("storage-by-rdd-table"))}
+
+
+
+
+ {UIUtils.listingTable(rddHeader, rddRow, rdds, id = Some("storage-by-rdd-table"))}
+
}
}