wake-up-neo.com

Warum wird SparkContext zufällig geschlossen und wie wird es von Zeppelin aus neu gestartet?

Ich arbeite in Zeppelin und schreibe Spark-SQL-Abfragen. Manchmal bekomme ich plötzlich diese Fehlermeldung (nachdem der Code nicht geändert wurde):

Cannot call methods on a stopped SparkContext.

Dann sagt die Ausgabe weiter unten:

The currently active SparkContext was created at:

(No active SparkContext.)

Das macht offensichtlich keinen Sinn. Ist das ein Fehler in Zeppelin? Oder mache ich etwas falsch? Wie kann ich den SparkContext neu starten?

Vielen Dank

14
The Puma

Ich habe dieses Problem einige Male getroffen. 

Wenn Sie Ihren Master als Garn-Client festlegen, kann dies an einem Stopp/Neustart von Resource Manager liegen. Der Interpreter-Prozess wird möglicherweise noch ausgeführt, aber der Spark-Kontext (eine Garn-Anwendung) ist nicht mehr vorhanden. 

Sie können überprüfen, ob Spark Context noch aktiv ist, indem Sie das Webinterface von Resource Manager aufrufen und prüfen, ob eine Anwendung namens Zeppelin ausgeführt wird.

Manchmal kann ein Neustart des Interpreterprozesses innerhalb von Zeppelin (Registerkarte Interpreter -> Funken -> Neustart) das Problem lösen.

Andere Zeiten müssen Sie:

  • beenden Sie den Spark-Interpreter-Prozess über die Befehlszeile
  • entfernen Sie die Spark-Interpreter-PID-Datei
  • beim nächsten Start eines Absatzes wird ein neuer Spark-Kontext erstellt
14
user1314742

Ich habe das gleiche Problem, wenn Sie mehrere Jobs in PySpark ausführen. Scheint, dass in Spark 2.0.0 mit SparkSession beim Aufruf von spark.stop() SparkSession der folgende Trace aufgerufen wird:

# SparkSession 
self._sc.stop()
# SparkContext.stop()
self._jsc = None

Wenn ich dann versuche, einen neuen Job mit einem neuen SparkContext zu erstellen, gibt SparkSession denselben SparkContext mit self.jsc = None zurück. 

Ich löste die Einstellung SparkSession._instantiatedContext = None nach spark.stop() und zwang SparkSession, beim nächsten Mal, das ich fordere, einen new SparkContext zu erstellen.

Es ist nicht die beste Option, aber inzwischen löst es mein Problem.

7
Franzi

Ich habe dieses Problem mehr bemerkt, wenn ich pyspark -Befehle auch mit trivialen Variablendeklarationen ausführe, bei denen eine Zellenausführung im laufenden Zustand hängt. Wie oben von user1314742 erwähnt, wird dieses Problem für mich gelöst, wenn Sie nur den entsprechenden PID töten.

z.B.:

ps -ef | grep zeppelin

Hier kann das Problem durch einen Neustart des Interpreters Spark= und einen Neustart des Zeppelin Notebook nicht behoben werden. Ich schätze, er kann den blockierten PID nicht selbst steuern.

0