Co w mojej powłoce iskrowej oznaczają wpisy takie jak poniżej, gdy wykonuję funkcję?
[Stage7:===========> (14174 + 5) / 62500]
Co w mojej powłoce iskrowej oznaczają wpisy takie jak poniżej, gdy wykonuję funkcję?
[Stage7:===========> (14174 + 5) / 62500]
Odpowiedzi:
To, co otrzymujesz, jest Console Progress Bar
,
[Stage 7:
pokazuje etap, na którym się teraz znajdujesz, i
(14174 + 5) / 62500]
jest (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
. Pasek postępu pokazuje numCompletedTasks
/ totalNumOfTasksInThisStage
.
Zostanie wyświetlony, gdy oba spark.ui.showConsoleProgress
mają wartość prawda (domyślnie) i poziom logowania conf/log4j.properties
to ERROR
lub WARN
( !log.isInfoEnabled
jest prawdziwe).
Zobaczmy kod w ConsoleProgressBar.scala, który to pokazuje:
private def show(now: Long, stages: Seq[SparkStageInfo]) {
val width = TerminalWidth / stages.size
val bar = stages.map { s =>
val total = s.numTasks()
val header = s"[Stage ${s.stageId()}:"
val tailer = s"(${s.numCompletedTasks()} + ${s.numActiveTasks()}) / $total]"
val w = width - header.length - tailer.length
val bar = if (w > 0) {
val percent = w * s.numCompletedTasks() / total
(0 until w).map { i =>
if (i < percent) "=" else if (i == percent) ">" else " "
}.mkString("")
} else {
""
}
header + bar + tailer
}.mkString("")
// only refresh if it's changed of after 1 minute (or the ssh connection will be closed
// after idle some time)
if (bar != lastProgressBar || now - lastUpdateTime > 60 * 1000L) {
System.err.print(CR + bar)
lastUpdateTime = now
}
lastProgressBar = bar
}
Załóżmy, że widzisz co następuje (X, A, B, C są zawsze nieujemnymi liczbami całkowitymi):
[Stage X:==========> (A + B) / C]
(na przykład w pytaniu X = 7, A = 14174, B = 5 i C = 62500)
Oto, co dzieje się na wysokim poziomie: Spark dzieli pracę na etapy i zadania na każdym etapie. Ten wskaźnik postępu oznacza, że Etap X składa się z zadań C. Podczas wykonywania A i B zaczynają się od zera i ciągle się zmieniają. A to zawsze liczba zadań już zakończonych, a B to liczba zadań aktualnie wykonywanych. W przypadku etapu z wieloma zadaniami (znacznie większy niż liczba pracowników, których masz), powinieneś spodziewać się, że liczba B wzrośnie do liczby odpowiadającej liczbie pracowników w klastrze, a następnie powinieneś zacząć widzieć wzrost A w miarę wykonywania zadań. Pod koniec, w miarę wykonywania ostatnich kilku zadań, B zacznie zmniejszać się, aż osiągnie 0, w którym to punkcie A powinno równać się C, etap jest zakończony, a iskra przechodzi do następnego etapu. C pozostanie niezmienne przez cały czas, pamiętaj, że jest to całkowita liczba zadań na etapie i nigdy się nie zmienia.
====> pokazuje procent pracy wykonanej na podstawie tego, co opisałem powyżej. Na początku znak> będzie skierowany w lewo i będzie przesuwał się w prawo w miarę wykonywania zadań.