Các con số trên thanh tiến trình có ý nghĩa gì trong spark-shell?


92

Trong spark-shell của tôi, các mục nhập như bên dưới có ý nghĩa gì khi tôi thực thi một hàm?

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

4
Tôi đã thay đổi ví dụ để sử dụng những con số thú vị hơn và thay đổi tiêu đề để làm cho câu hỏi dễ tìm hơn. Điều này làm mất đi một chút so với câu hỏi ban đầu của bạn, bởi vì điều này cho thấy rõ ràng rằng đây là một thanh tiến trình (trong trường hợp của bạn không rõ ràng chút nào, vì nó đang đứng ở mức 0). Nhưng tôi nghĩ rằng nó hữu ích hơn theo cách này. Nếu bạn không đồng ý, vui lòng hoàn tác các thay đổi của tôi! Cảm ơn!
Daniel Darabos

Nghe có vẻ ổn đối với tôi - cảm ơn vì điều đó
rmckeown

2
Câu hỏi hay. Tự hỏi tại sao tôi không hỏi nó trong một năm (thời gian làm việc của tôi trên Spark) !!
Prashant

Câu trả lời:


102

Những gì bạn nhận được là một Console Progress Bar, [Stage 7:cho thấy giai đoạn bạn đang ở hiện tại và (14174 + 5) / 62500]hiện tại (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]. Thanh tiến trình hiển thị numCompletedTasks/ totalNumOfTasksInThisStage.

Nó sẽ được hiển thị khi cả hai đều spark.ui.showConsoleProgress đúng (theo mặc định) mức đăng nhập conf/log4j.propertiesERRORhoặc WARN( !log.isInfoEnabledlà đúng).

Hãy xem đoạn mã trong ConsoleProgressBar.scala cho thấy điều đó:

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
Câu trả lời chính xác! Đây là liên kết đến yêu cầu kéo đã giới thiệu tính năng này: github.com/apache/spark/pull/3029 . Trang đó có một số thảo luận về thiết kế thú vị RE: hành vi của thanh tiến trình này, đặc biệt là đối với các công việc nhiều giai đoạn.
Josh Rosen

30

Giả sử bạn thấy như sau (X, A, B, C luôn là các số nguyên không âm):

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

(ví dụ trong câu hỏi X = 7, A = 14174, B = 5 và C = 62500)

Đây là những gì đang diễn ra ở cấp độ cao: Spark chia nhỏ công việc theo từng giai đoạn và nhiệm vụ trong từng giai đoạn. Chỉ báo tiến độ này có nghĩa là Giai đoạn X bao gồm các nhiệm vụ C. Trong quá trình thực hiện, A và B bắt đầu từ 0 và tiếp tục thay đổi. A luôn là số tác vụ đã hoàn thành và B là số tác vụ hiện đang thực hiện. Đối với một giai đoạn có nhiều nhiệm vụ (nhiều hơn số công nhân bạn có), bạn sẽ thấy B tăng lên một số tương ứng với số công nhân bạn có trong nhóm, sau đó bạn sẽ bắt đầu thấy A tăng lên khi các nhiệm vụ hoàn thành. Về cuối, khi một vài nhiệm vụ cuối cùng thực hiện, B sẽ bắt đầu giảm cho đến khi nó về 0, tại điểm A sẽ bằng C, giai đoạn đã hoàn thành và tia lửa chuyển sang giai đoạn tiếp theo. C sẽ không đổi trong toàn bộ thời gian, hãy nhớ nó là tổng số nhiệm vụ trong giai đoạn và không bao giờ thay đổi.

====> hiển thị phần trăm công việc được thực hiện dựa trên những gì tôi đã mô tả ở trên. Lúc đầu, dấu> sẽ hướng về bên trái và sẽ di chuyển sang phải khi các nhiệm vụ được hoàn thành.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.