Що означають цифри на індикаторі прогресу в іскровій оболонці?


92

У моїй іскровій оболонці, що означають записи, як показано нижче, коли я виконую функцію?

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

4
Я змінив приклад, щоб використовувати більш цікаві цифри, і змінив заголовок, щоб полегшити пошук запитання. Це трохи забирає ваше початкове запитання, оскільки це дає зрозуміти, що це індикатор прогресу (що у вашому випадку було зовсім не зрозумілим, оскільки воно стояло на рівні 0). Але я думаю, що це загалом корисніше. Якщо ви не згодні, сміливо відміняйте мої зміни! Дякую!
Даніель Дарабос

Мені це добре звучить - дякую за це
rmckeown

2
Класне запитання. Цікаво, чому я не просив його протягом року (тривалість моєї роботи над Spark) !!
Прашант,

Відповіді:


102

Те, що ви отримуєте, це Console Progress Bar, [Stage 7:показує той етап, на якому ви перебуваєте зараз, і (14174 + 5) / 62500]є (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]. Індикатор виконання показує numCompletedTasks/ totalNumOfTasksInThisStage.

Він відображатиметься, коли обидва spark.ui.showConsoleProgress значення true (за замовчуванням) і рівень журналу в conf/log4j.propertiesis ( ERRORабо true).WARN!log.isInfoEnabled

Давайте подивимося код у ConsoleProgressBar.scala, який його показує:

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
Чудова відповідь! Ось посилання на запит на витяг, який представив цю функцію: github.com/apache/spark/pull/3029 . На цій сторінці є кілька цікавих дискусій щодо дизайну RE: поведінка цієї панелі прогресу, особливо для багатоступеневих робіт.
Джош Розен,

30

Припустимо, ви бачите наступне (X, A, B, C завжди невід’ємні цілі числа):

[Stage X:==========>            (A + B) / C]

(наприклад, у питанні X = 7, A = 14174, B = 5 та C = 62500)

Ось що відбувається на високому рівні: Іскра розбиває роботу поетапно і завдання на кожному етапі. Цей показник прогресу означає, що Етап X складається із завдань C. Під час виконання A і B починаються з нуля і продовжують змінюватися. A - це завжди кількість вже виконаних завдань, а B - кількість завдань, які виконуються в даний час. Для етапу з багатьма завданнями (набагато більше, ніж у вас є працівники), слід очікувати, що B зросте до числа, яке відповідає кількості робочих місць у кластері, тоді ви повинні почати бачити збільшення, коли завдання будуть виконані. Ближче до кінця, коли виконується кілька останніх завдань, B почне зменшуватися, поки не досягне 0, тоді точка A повинна дорівнювати C, етап закінчений, і іскра переходить на наступний етап. C залишатиметься постійним протягом усього часу, пам’ятайте, що це загальна кількість завдань на етапі і ніколи не змінюється.

====> показує відсоток виконаної роботи на основі того, що я описав вище. На початку> буде вліво і рухатиметься вправо, коли завдання будуть виконані.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.