진행률 표시 줄의 숫자는 Spark-shell에서 무엇을 의미합니까?


92

내 스파크 쉘에서 함수를 실행할 때 아래와 같은 항목은 무엇을 의미합니까?

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

4
더 흥미로운 숫자를 사용하도록 예제를 변경하고 질문을 더 쉽게 찾을 수 있도록 제목을 변경했습니다. 이것은 진행률 표시 줄 (귀하의 경우 0에 서 있기 때문에 전혀 명확하지 않음)임을 명확하게하기 때문에 원래 질문에서 약간 벗어납니다. 하지만 전반적으로 이런 식으로 더 유용하다고 생각합니다. 동의하지 않는 경우 변경 사항을 취소하십시오! 감사!
Daniel Darabos

나에게 소리 벌금 - 그 주셔서 감사합니다
rmckeown

2
멋진 질문입니다. 왜 1 년 동안 요청하지 않았는지 궁금합니다 (Spark에서 작업 한 기간) !!
Prashant

답변:


102

당신이 얻는 것은이고 Console Progress Bar, [Stage 7:당신이 지금있는 무대를 보여주고, (14174 + 5) / 62500]입니다 (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]. 진행 표시 줄에 numCompletedTasks/가 표시 totalNumOfTasksInThisStage됩니다.

그것은 때 표시됩니다 모두가 spark.ui.showConsoleProgress (기본적으로) 사실 에 수준을 기록 conf/log4j.properties하다 ERROR거나 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 : 특히 다단계 작업에 대한이 진행률 표시 줄의 동작.
Josh Rosen

30

다음이 표시된다고 가정합니다 (X, A, B, C는 항상 음의 정수가 아닙니다).

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

(예 : 질문 X = 7, A = 14174, B = 5 및 C = 62500)

높은 수준에서 진행되는 작업은 다음과 같습니다. Spark는 각 단계의 작업과 작업을 단계적으로 나눕니다. 이 진행률 표시기는 X 단계가 C 작업으로 구성되어 있음을 의미합니다. 실행 중에 A와 B는 0에서 시작하여 계속 변경됩니다. A는 항상 이미 완료된 작업의 수이고 B는 현재 실행중인 작업의 수입니다. 작업이 많은 단계 (사용자가 보유한 작업자보다 훨씬 많음)의 경우 B가 클러스터에있는 작업자 수에 해당하는 숫자로 증가 할 것으로 예상해야합니다. 그런 다음 작업이 완료되면 A가 증가하는 것을 확인해야합니다. 마지막으로, 마지막 몇 개의 작업이 실행됨에 따라 B는 0에 도달 할 때까지 감소하기 시작합니다.이 지점에서 A는 C와 같아야하며 단계가 완료되고 스파크는 다음 단계로 이동합니다. C는 전체 시간 동안 일정하게 유지되며 스테이지의 총 작업 수이며 절대 변경되지 않습니다.

====>는 위에서 설명한 내용을 기반으로 한 작업 비율을 보여줍니다. 처음에는>가 왼쪽에 있고 작업이 완료되면 오른쪽으로 이동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.