ตัวเลขบนแถบความคืบหน้าหมายถึงอะไรใน spark-shell?


93

ใน spark-shell ของฉันรายการด้านล่างหมายความว่าอย่างไรเมื่อฉันเรียกใช้ฟังก์ชัน

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

4
ฉันได้เปลี่ยนตัวอย่างเพื่อใช้ตัวเลขที่น่าสนใจมากขึ้นและเปลี่ยนชื่อเพื่อให้ค้นหาคำถามได้ง่ายขึ้น สิ่งนี้จะนำไปจากคำถามเดิมของคุณเล็กน้อยเนื่องจากทำให้ชัดเจนว่านี่คือแถบความคืบหน้า (ซึ่งในกรณีของคุณไม่ชัดเจนเลยเนื่องจากมันอยู่ที่ 0) แต่ฉันคิดว่าวิธีนี้มีประโยชน์มากกว่าโดยรวม หากคุณไม่เห็นด้วยอย่าลังเลที่จะยกเลิกการเปลี่ยนแปลงของฉัน! ขอบคุณ!
Daniel Darabos

ฟังดูดีสำหรับฉัน - ขอบคุณสำหรับสิ่งนั้น
rmckeown

2
คำถามเด็ด. สงสัยว่าทำไมไม่ถามมาเป็นปี (ระยะเวลาทำงานกับ Spark) !!
Prashant

คำตอบ:


103

สิ่งที่คุณได้รับคือConsole Progress Bar, [Stage 7:การแสดงบนเวทีที่คุณอยู่ในขณะนี้และ เป็น(14174 + 5) / 62500] (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]แถบความคืบหน้าการแสดง/numCompletedTaskstotalNumOfTasksInThisStage

จะแสดงเมื่อทั้งสอง 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

31

สมมติว่าคุณเห็นสิ่งต่อไปนี้ (X, A, B, C ไม่ใช่จำนวนเต็มลบเสมอ):

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

(ตัวอย่างเช่นในคำถาม X = 7, A = 14174, B = 5 และ C = 62500)

นี่คือสิ่งที่เกิดขึ้นในระดับสูง: Spark แบ่งงานเป็นขั้นตอนและงานในแต่ละขั้นตอน ตัวบ่งชี้ความคืบหน้านี้หมายความว่า Stage X ประกอบด้วยงาน C ในระหว่างการดำเนินการ A และ B เริ่มต้นที่ศูนย์และเปลี่ยนแปลงไปเรื่อย ๆ A คือจำนวนงานที่ทำเสร็จแล้วและ B คือจำนวนงานที่กำลังดำเนินการอยู่ สำหรับขั้นตอนที่มีงานจำนวนมาก (มากกว่าคนงานที่คุณมี) คุณควรคาดหวังว่า B จะเติบโตเป็นจำนวนที่สอดคล้องกับจำนวนคนงานที่คุณมีในคลัสเตอร์คุณควรเริ่มเห็น A เพิ่มขึ้นเมื่องานเสร็จสมบูรณ์ ในตอนท้ายเมื่อดำเนินการสองสามงานสุดท้าย B จะเริ่มลดลงจนกว่าจะถึง 0 ซึ่งจุด A ควรเท่ากับ C เวทีจะเสร็จสิ้นและประกายไฟจะย้ายไปยังขั้นตอนถัดไป C จะคงที่ตลอดเวลาจำไว้ว่าเป็นจำนวนงานทั้งหมดในขั้นตอนและไม่เปลี่ยนแปลง

====> แสดงเปอร์เซ็นต์ของงานที่ทำตามที่ฉันอธิบายไว้ข้างต้น ที่จุดเริ่มต้น> จะไปทางซ้ายและจะเลื่อนไปทางขวาเมื่องานเสร็จสมบูรณ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.