İlerleme çubuğundaki sayılar spark-shell'de ne anlama geliyor?


93

Kıvılcım kabuğumda, bir işlevi çalıştırdığımda aşağıdaki gibi girişler ne anlama geliyor?

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

4
Örneği daha ilginç sayılar kullanacak şekilde değiştirdim ve sorunun daha kolay bulunmasını sağlamak için başlığı değiştirdim. Bu, orijinal sorunuzdan biraz uzaklaşır, çünkü bu, bunun bir ilerleme çubuğu olduğunu açıkça ortaya koyar (bu, sizin durumunuzda 0'da durduğu için hiç net değildi). Ancak genel olarak bu şekilde daha faydalı olduğunu düşünüyorum. Kabul etmiyorsanız, değişikliklerimi geri alabilirsiniz! Teşekkürler!
Daniel Darabos

Bana iyi geliyor - bunun için teşekkürler
rmckeown

2
Harika soru. Neden bir yıl boyunca sormadığımı merak ediyorum (Spark'taki çalışmalarımın süresi) !!
Prashant

Yanıtlar:


103

Ne olsun bir olduğunu Console Progress Bar, [Stage 7:artık içindedir gösterileri sahne ve (14174 + 5) / 62500]bir (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]. İlerleme çubuğu numCompletedTasks/ gösterir totalNumOfTasksInThisStage.

Bu zaman görünecek hem spark.ui.showConsoleProgress (varsayılan olarak) doğrudur ve seviyeyi log conf/log4j.propertiesolduğu ERRORveya WARN( !log.isInfoEnableddoğrudur).

ConsoleProgressBar.scala'da onu gösteren kodu görelim :

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
Mükemmel cevap! İşte bu özelliği tanıtan çekme isteğine bir bağlantı: github.com/apache/spark/pull/3029 . Bu sayfada bazı ilginç tasarım tartışmaları var: Bu ilerleme çubuğunun özellikle çok aşamalı işler için davranışı.
Josh Rosen

31

Aşağıdakileri gördüğünüzü varsayalım (X, A, B, C her zaman negatif olmayan tam sayılardır):

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

(örneğin X = 7, A = 14174, B = 5 ve C = 62500 sorusunda)

İşte yüksek düzeyde olup bitenler: Spark, her aşamada işi aşamalar ve görevler halinde kırar. Bu ilerleme göstergesi, Aşama X'in C görevlerinden oluştuğu anlamına gelir. Yürütme sırasında, A ve B sıfırdan başlar ve değişmeye devam eder. A her zaman halihazırda bitmiş olan görevlerin sayısıdır ve B şu anda yürütülen görevlerin sayısıdır. Birçok görevin olduğu bir aşama için (sahip olduğunuz işçilerden çok daha fazla), B'nin kümede kaç işçinizin olduğuna karşılık gelen bir sayıya ulaşmasını beklemelisiniz, ardından görevler tamamlandıkça A artışı görmeye başlamalısınız. Son birkaç görev yürütüldüğünde, B 0'a ulaşana kadar azalmaya başlayacak, bu noktada A, C'ye eşit olmalı, aşama tamamlanmış ve kıvılcım bir sonraki aşamaya geçecektir. C tüm zaman boyunca sabit kalacaktır, bunun aşamadaki toplam görev sayısı olduğunu ve asla değişmediğini unutmayın.

====>, yukarıda anlattıklarıma göre yapılan iş yüzdesini gösterir. Başlangıçta> sola doğru olacak ve görevler tamamlandığında sağa doğru hareket edecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.