Apa arti angka-angka pada bilah kemajuan di spark-shell?

93

Di spark-shell saya, apa arti entri seperti di bawah ini ketika saya menjalankan suatu fungsi?

[Stage7:===========>                              (14174 + 5) / 62500]
rmckeown.dll
sumber
4
Saya telah mengubah contoh untuk menggunakan angka yang lebih menarik dan mengubah judul agar pertanyaan lebih mudah ditemukan. Ini menghilangkan sedikit dari pertanyaan awal Anda, karena ini memperjelas bahwa ini adalah bilah kemajuan (yang dalam kasus Anda sama sekali tidak jelas, karena berdiri di 0). Tapi menurut saya cara ini lebih berguna secara keseluruhan. Jika Anda tidak setuju, silakan urungkan perubahan saya! Terima kasih!
Daniel Darabos
Kedengarannya bagus bagi saya - terima kasih untuk itu
rmckeown
2
Pertanyaan keren. Bertanya-tanya mengapa saya tidak memintanya selama setahun (durasi pekerjaan saya di Spark) !!
Prashant

Jawaban:

103

Apa yang Anda dapatkan adalah a Console Progress Bar, [Stage 7:menunjukkan tahap Anda saat ini, dan (14174 + 5) / 62500]sekarang (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]. Bilah kemajuan menunjukkan numCompletedTasks/ totalNumOfTasksInThisStage.

Ini akan ditampilkan jika keduanya spark.ui.showConsoleProgress benar (secara default) dan tingkat log in conf/log4j.propertiesadalah ERRORatau WARN( !log.isInfoEnabledbenar).

Mari kita lihat kode di ConsoleProgressBar.scala yang menunjukkannya:

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
}
yjshen
sumber
8
Jawaban yang bagus! Berikut ini tautan ke permintaan penarikan yang memperkenalkan fitur ini: github.com/apache/spark/pull/3029 . Halaman itu memiliki beberapa diskusi desain yang menarik RE: perilaku bilah kemajuan ini, terutama untuk pekerjaan multi-tahap.
Josh Rosen
31

Anggaplah Anda melihat yang berikut ini (X, A, B, C selalu merupakan bilangan bulat non negatif):

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

(misalnya pada soal X = 7, A = 14174, B = 5 dan C = 62500)

Inilah yang terjadi pada level tinggi: Spark memecah pekerjaan dalam tahapan dan tugas di setiap tahapan. Indikator kemajuan ini berarti bahwa Tahap X terdiri dari tugas-tugas C. Selama eksekusi, A dan B mulai dari nol dan terus berubah. A selalu jumlah tugas yang sudah selesai dan B adalah jumlah tugas yang sedang dijalankan. Untuk tahap dengan banyak tugas (jauh lebih banyak daripada pekerja yang Anda miliki), Anda akan melihat B bertambah ke angka yang sesuai dengan berapa banyak pekerja yang Anda miliki di cluster, lalu Anda akan mulai melihat A meningkat saat tugas selesai. Menjelang akhir, saat beberapa tugas terakhir dijalankan, B akan mulai menurun hingga mencapai 0, di mana titik A harus sama dengan C, tahapan selesai, dan percikan pindah ke tahap berikutnya. C akan tetap konstan sepanjang waktu, ingat itu adalah jumlah total tugas dalam tahapan dan tidak pernah berubah.

====> menunjukkan persentase pekerjaan yang diselesaikan berdasarkan apa yang saya jelaskan di atas. Pada awalnya> akan mengarah ke kiri dan akan bergerak ke kanan saat tugas selesai.

gae123
sumber