Skip to content

Commit

Permalink
Improved scalability
Browse files Browse the repository at this point in the history
  • Loading branch information
sarutak committed Apr 21, 2015
1 parent dec85db commit 999ccd4
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ function drawJobTimeline(groupArray, eventObjArray) {
setupZoomable("#job-timeline-zoom-lock", jobTimeline);
}

function drawTaskAssignmentTimeline(groupArray, eventObjArray) {
function drawTaskAssignmentTimeline(groupArray, eventObjArray, minLaunchTime, zoomMax) {
var groups = new vis.DataSet(groupArray);
var items = new vis.DataSet(eventObjArray);
var container = $("#task-assignment-timeline")[0]
Expand All @@ -69,14 +69,19 @@ function drawTaskAssignmentTimeline(groupArray, eventObjArray) {
align: 'left',
selectable: false,
showCurrentTime: false,
zoomable: false
zoomable: false,
zoomMax: zoomMax
};

var taskTimeline = new vis.Timeline(container)
taskTimeline.setOptions(options);
taskTimeline.setGroups(groups);
taskTimeline.setItems(items);

var curEnd = taskTimeline.getWindow()["end"].getTime();
if (curEnd - minLaunchTime > zoomMax) {
curEnd = minLaunchTime + zoomMax;
}
taskTimeline.setWindow(minLaunchTime, curEnd);
setupZoomable('#task-assignment-timeline-zoom-lock', taskTimeline);
}

Expand Down
23 changes: 22 additions & 1 deletion core/src/main/scala/org/apache/spark/ui/jobs/StagePage.scala
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,9 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {

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

var minLaunchTime = Long.MaxValue
var maxFinishTime = Long.MinValue
var numEffectiveTasks = 0
val executorsArrayStr = stageData.taskData.flatMap {
case (_, taskUIData) =>
val taskInfo = taskUIData.taskInfo
Expand Down Expand Up @@ -464,6 +467,9 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
val launchTime = taskInfo.launchTime
val finishTime = if (!isRunning) taskInfo.finishTime else currentTime
val totalExecutionTime = finishTime - launchTime
minLaunchTime = launchTime.min(minLaunchTime)
maxFinishTime = launchTime.max(maxFinishTime)
numEffectiveTasks += 1

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

var maxWindowInSec = ((maxFinishTime - minLaunchTime) / 1000.0).round
if (maxWindowInSec <= 0) maxWindowInSec = 1
val tasksPerSecond = numEffectiveTasks / maxWindowInSec
var maxZoom = {
if (tasksPerSecond > 100) {
1000L / (tasksPerSecond / 100)
}
else {
24L * 60 * 60 * 1000
}
}

if (maxZoom < 0) maxZoom = 1

val content =
summary ++
showAdditionalMetrics ++
Expand All @@ -570,7 +590,8 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
</div>
</div> ++
<script type="text/javascript">
{Unparsed(s"drawTaskAssignmentTimeline(${groupArrayStr}, ${executorsArrayStr})")}
{Unparsed(s"drawTaskAssignmentTimeline(" +
s"${groupArrayStr}, ${executorsArrayStr}, ${minLaunchTime}, ${maxZoom})")}
</script>

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

0 comments on commit 999ccd4

Please sign in to comment.