web-dev-qa-db-fra.com

Pourquoi SparkContext se ferme-t-il au hasard et comment le redémarrer à partir de Zeppelin?

Je travaille dans Zeppelin en écrivant des requêtes spark-sql et parfois je commence soudain à avoir cette erreur (après ne pas avoir changé de code):

Cannot call methods on a stopped SparkContext.

Ensuite, la sortie dit plus bas:

The currently active SparkContext was created at:

(No active SparkContext.)

Cela n'a évidemment aucun sens. Est-ce un bug dans Zeppelin? Ou est-ce que je fais quelque chose de mal? Comment puis-je redémarrer le SparkContext?

Je vous remercie

14
The Puma

J'ai fait face à ce problème plusieurs fois. 

Si vous définissez votre maître en tant que client-fil, cela peut être dû à l'arrêt/au redémarrage de Resource Manager, le processus d'interprétation peut toujours être en cours d'exécution, mais le contexte Spark (qui est une application Yarn) n'existe plus. 

Vous pouvez vérifier si Spark Context est toujours en cours d'exécution en consultant l'interface Web de votre gestionnaire de ressources et en vérifiant si une application appelée Zeppelin est en cours d'exécution.

Parfois, le fait de redémarrer le processus d'interprétation depuis Zeppelin (onglet d'interprétation -> spark -> restart) résoudra le problème.

D'autres fois, vous devez:

  • tuer le processus d'interprétation Spark à partir de la ligne de commande
  • supprimez le fichier PID Interpreter Spark
  • et la prochaine fois que vous commencez un paragraphe, il va commencer un nouveau contexte d'étincelle
14
user1314742

Je suis confronté au même problème lors de l'exécution de plusieurs tâches dans PySpark . Il semble que dans Spark 2.0.0, avec SparkSession, lorsque j'appelle spark.stop(), SparkSession appelle la trace suivante:

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

Ensuite, lorsque j'essaie de créer un nouveau travail avec un nouveau SparkContext, SparkSession renvoie le même SparkContext qu'auparavant avec self.jsc = None

J'ai résolu le paramètre SparkSession._instantiatedContext = None après spark.stop(), forçant SparkSession à créer un new SparkContext lors de la prochaine demande.

Ce n'est pas la meilleure option, mais en attendant, cela résout mon problème.

7
Franzi

J'ai remarqué ce problème plus souvent lors de l'exécution de commandes pyspark, même avec des déclarations de variable triviales indiquant qu'une exécution de cellule est suspendue dans un état d'exécution. Comme mentionné ci-dessus par l'utilisateur 1314742, le simple fait de tuer la variable PID correspondante résout ce problème pour moi. 

par exemple.:

ps -ef | grep zeppelin

C’est ici que le redémarrage de l’interpréteur Spark et du carnet de notes zeppelin ne résolvent pas le problème. Je suppose que parce qu'il ne peut pas contrôler la variable PID en elle-même.

0