Skip to content

Commit 999ccd4

Browse files
committed
Improved scalability
1 parent dec85db commit 999ccd4

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

core/src/main/resources/org/apache/spark/ui/static/timeline-view.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ function drawJobTimeline(groupArray, eventObjArray) {
5757
setupZoomable("#job-timeline-zoom-lock", jobTimeline);
5858
}
5959

60-
function drawTaskAssignmentTimeline(groupArray, eventObjArray) {
60+
function drawTaskAssignmentTimeline(groupArray, eventObjArray, minLaunchTime, zoomMax) {
6161
var groups = new vis.DataSet(groupArray);
6262
var items = new vis.DataSet(eventObjArray);
6363
var container = $("#task-assignment-timeline")[0]
@@ -69,14 +69,19 @@ function drawTaskAssignmentTimeline(groupArray, eventObjArray) {
6969
align: 'left',
7070
selectable: false,
7171
showCurrentTime: false,
72-
zoomable: false
72+
zoomable: false,
73+
zoomMax: zoomMax
7374
};
7475

7576
var taskTimeline = new vis.Timeline(container)
7677
taskTimeline.setOptions(options);
7778
taskTimeline.setGroups(groups);
7879
taskTimeline.setItems(items);
79-
80+
var curEnd = taskTimeline.getWindow()["end"].getTime();
81+
if (curEnd - minLaunchTime > zoomMax) {
82+
curEnd = minLaunchTime + zoomMax;
83+
}
84+
taskTimeline.setWindow(minLaunchTime, curEnd);
8085
setupZoomable('#task-assignment-timeline-zoom-lock', taskTimeline);
8186
}
8287

core/src/main/scala/org/apache/spark/ui/jobs/StagePage.scala

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,9 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
436436

437437
val executorsSet = new HashSet[(String, String)]
438438

439+
var minLaunchTime = Long.MaxValue
440+
var maxFinishTime = Long.MinValue
441+
var numEffectiveTasks = 0
439442
val executorsArrayStr = stageData.taskData.flatMap {
440443
case (_, taskUIData) =>
441444
val taskInfo = taskUIData.taskInfo
@@ -464,6 +467,9 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
464467
val launchTime = taskInfo.launchTime
465468
val finishTime = if (!isRunning) taskInfo.finishTime else currentTime
466469
val totalExecutionTime = finishTime - launchTime
470+
minLaunchTime = launchTime.min(minLaunchTime)
471+
maxFinishTime = launchTime.max(maxFinishTime)
472+
numEffectiveTasks += 1
467473

468474
val metricsOpt = taskUIData.taskMetrics
469475
val shuffleReadTime =
@@ -555,6 +561,20 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
555561
""".stripMargin
556562
}.mkString("[", ",", "]")
557563

564+
var maxWindowInSec = ((maxFinishTime - minLaunchTime) / 1000.0).round
565+
if (maxWindowInSec <= 0) maxWindowInSec = 1
566+
val tasksPerSecond = numEffectiveTasks / maxWindowInSec
567+
var maxZoom = {
568+
if (tasksPerSecond > 100) {
569+
1000L / (tasksPerSecond / 100)
570+
}
571+
else {
572+
24L * 60 * 60 * 1000
573+
}
574+
}
575+
576+
if (maxZoom < 0) maxZoom = 1
577+
558578
val content =
559579
summary ++
560580
showAdditionalMetrics ++
@@ -570,7 +590,8 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
570590
</div>
571591
</div> ++
572592
<script type="text/javascript">
573-
{Unparsed(s"drawTaskAssignmentTimeline(${groupArrayStr}, ${executorsArrayStr})")}
593+
{Unparsed(s"drawTaskAssignmentTimeline(" +
594+
s"${groupArrayStr}, ${executorsArrayStr}, ${minLaunchTime}, ${maxZoom})")}
574595
</script>
575596

576597
UIUtils.headerSparkPage("Details for Stage %d".format(stageId), content, parent)

0 commit comments

Comments
 (0)