Co oznaczają liczby na pasku postępu w powłoce iskry?


93

Co w mojej powłoce iskrowej oznaczają wpisy takie jak poniżej, gdy wykonuję funkcję?

[Stage7:===========>                              (14174 + 5) / 62500]

4
Zmieniłem przykład, aby użyć bardziej interesujących liczb i zmieniłem tytuł, aby ułatwić znalezienie pytania. To trochę odbiega od pierwotnego pytania, ponieważ wyjaśnia, że ​​jest to pasek postępu (który w twoim przypadku wcale nie był jasny, ponieważ znajdował się na 0). Ale myślę, że ogólnie jest to bardziej przydatne. Jeśli się nie zgadzasz, możesz cofnąć moje zmiany! Dzięki!
— Daniel Darabos

Brzmi dobrze - dzięki za to
— rmckeown

2
Fajne pytanie. Zastanawiam się, dlaczego nie prosiłem o to przez rok (czas pracy nad Spark) !!
— Prashant

Odpowiedzi:


103

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.propertiesto ERRORlub WARN( !log.isInfoEnabledjest 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
}

8
Świetna odpowiedź! Oto link do żądania ściągnięcia, które wprowadziło tę funkcję: github.com/apache/spark/pull/3029 . Ta strona zawiera interesujące dyskusje na temat projektowania RE: zachowanie tego paska postępu, szczególnie w przypadku zadań wieloetapowych.
— Josh Rosen

31

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ń.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.