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
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:
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.
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.