स्पार्क-शेल में प्रगति पट्टी पर संख्याओं का क्या मतलब है?


92

मेरे स्पार्क-शेल में, जब मैं किसी फ़ंक्शन को निष्पादित करता हूं तो नीचे की तरह प्रविष्टियां क्या होती हैं?

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

4
मैंने अधिक दिलचस्प संख्याओं का उपयोग करने के लिए उदाहरण को बदल दिया है और शीर्षक को बदलने के लिए प्रश्न को खोजना आसान बना दिया है। यह आपके मूल प्रश्न से थोड़ा दूर ले जाता है, क्योंकि यह स्पष्ट करता है कि यह एक प्रगति पट्टी है (जो कि आपके मामले में बिल्कुल भी स्पष्ट नहीं थी, क्योंकि यह 0 पर खड़ी थी)। लेकिन मुझे लगता है कि यह इस तरह से अधिक उपयोगी है। यदि आप असहमत हैं, तो मेरे परिवर्तनों को पूर्ववत करने के लिए स्वतंत्र महसूस करें! धन्यवाद!
डैनियल डैराबोस

मेरे लिए ठीक लगता है - इसके लिए धन्यवाद
rmckeown

2
अच्छा सवाल है। आश्चर्य है कि मैंने इसे एक साल के लिए क्यों नहीं पूछा (स्पार्क पर मेरे काम की अवधि) !!
प्रशांत

जवाबों:


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 । उस पृष्ठ में कुछ दिलचस्प डिज़ाइन चर्चाएँ आरई हैं: इस प्रगति बार का व्यवहार, विशेष रूप से बहु-स्तरीय नौकरियों के लिए।
जोश रोसेन

30

मान लें कि आप निम्नलिखित देखते हैं (एक्स, ए, बी, सी हमेशा गैर नकारात्मक पूर्णांक हैं):

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

(उदाहरण के लिए X = 7, A = 14174, B = 5 और C = 62500)

यहाँ वह है जो उच्च स्तर पर चल रहा है: स्पार्क प्रत्येक चरण में चरणों और कार्यों में कार्य को तोड़ता है। यह प्रगति संकेतक का अर्थ है कि स्टेज एक्स सी कार्यों से युक्त है। निष्पादन के दौरान, ए और बी शून्य पर शुरू होते हैं और बदलते रहते हैं। A हमेशा समाप्त होने वाले कार्यों की संख्या है और B वर्तमान में निष्पादित होने वाले कार्यों की संख्या है। कई कार्यों के साथ एक चरण के लिए (जिस तरह से आपके पास श्रमिकों की तुलना में अधिक है) आपको बी को एक संख्या में बढ़ने की उम्मीद करनी चाहिए जो क्लस्टर में आपके पास कितने श्रमिकों से मेल खाती है, तो आपको ए के कार्यों को पूरा होने के रूप में देखना शुरू करना चाहिए। अंत में, अंतिम कुछ कार्यों के निष्पादन के रूप में, बी तब तक घटने लगेगा जब तक कि यह 0 तक नहीं पहुंच जाता है, जिस बिंदु पर A को C के बराबर होना चाहिए, चरण पूरा हो गया है, और स्पार्क अगले चरण में चला जाता है। सी पूरे समय के दौरान स्थिर रहेगा, याद रखें कि यह चरण में कुल कार्यों की संख्या है और कभी नहीं बदलता है।

====> जो मैंने ऊपर वर्णित किया है उसके आधार पर किए गए कार्य का प्रतिशत दर्शाता है। शुरुआत में> बाईं ओर होगा और कार्य पूरा होते ही दाईं ओर जा रहा होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.