2
votes

Comment tuer l'application Apache Spark exécutée en arrière-plan après l'avoir supprimée à partir de l'interface utilisateur Web SPARK

Le code ci-dessous est créé avec succès dans le contexte Spark lorsque je soumets en utilisant spark submit et fonctionne correctement.

Quand je tue l'application sous Running Applications à partir d'Apache spark interface utilisateur Web, l'état de l'application indique tué mais, impression de application de test à l'écran après avoir tué également:

Application exécutée sur l'interface utilisateur Web apache spark: p >

 entrez la description de l'image ici

Application tuée à l'aide du bouton" kill "sur l'interface utilisateur Web Spark

 entrez la description de l'image ici

Toujours imprimer le message à l'écran après avoir tué l'application

 entrez la description de l'image ici

Besoin d'une solution pour tuer automatiquement python travail quand je tue spark-context

from pyspark import SparkConf
from pyspark import SparkContext

if __name__ == "__main__":
    conf = SparkConf().setAppName("TEST")
    conf.set("spark.scheduler.mode", "FAIR")
    sc = SparkContext(conf=conf)

    while True:
        print("Test application")


2 commentaires

Exécutez-vous Spark Application sur Yarn. Si oui, supprimez-le de Yarn en utilisant la commande "Yarn application -kill "


Soumettre manuellement via l'éditeur de commande spark-submit test_spark.py et je peux voir la sortie d'impression sur le même éditeur de commande.


3 Réponses :


0
votes

Vous pouvez le faire à l'ancienne.

Exécutez ps -ef et trouvez l'ID de la tâche java. Puis lancez kill -9

//Find all the java jobs
[stack_overflow@stack_overflow ~]$ ps -ef | grep SparkSubmit
stack_overflow  96747  96736 99 11:19 pts/15   00:01:55 /usr/bin/java -cp /opt/spark/conf/:/opt/spark/jars/* -Dscala.usejavacp=true -Xmx1g -Dderby.system.home=/home/stack_overflow/Spark/ org.apache.spark.deploy.SparkSubmit --conf spark.local.dir=/opt/spark/temp_land/spark-temp --conf spark.driver.extraJavaOptions=-Dderby.system.home=/home/stack_overflow/ --class org.apache.spark.repl.Main --name Spark shell spark-shell
stack_overflow  97410  14952  0 11:20 pts/15   00:00:00 grep --color=auto SparkSubmit
//96747 is the Spark job I forced to become unresponsive
//97410 is the Base Spark Account don't delete
////Run the kill command on the job, only works if you have permissions on that job
[stack_overflow@stack_overflow ~]$ kill -9 96747
//The job is now dead and gone
[stack_overflow@stack_overflow ~]$ ps -ef | grep SparkSubmit
stack_overflow  96190  14952  0 11:17 pts/15   00:00:00 grep --color=auto SparkSubmit


4 commentaires

Merci pour la réponse. Puis-je gérer dans le programme python? Raison: en production, je peux être en mesure de soumettre plusieurs jobs Spark jobs et chaque job contient un sparkcontext séparé. Je m'attends à ce que si je tue la session de contexte Spark sur l'interface utilisateur Spark, cela devrait tuer toute l'exécution de l'application.


Disons que je lance 10 travaux Spark chacun avec leur propre SparkContext, puis ils devraient chacun avoir leur propre PID ou Job_ID à tuer. Pour votre question, non, vous pouvez tuer directement depuis Spark (chaque fois que le travail devient aberrant) comme vous l'avez vu et ne meurt pas. Cependant, si vous êtes intéressé, vous pouvez configurer un observateur pour tuer sur commande. (1) À partir d'un programme de haut niveau, obtenez un programme pour regarder un dossier, vérifiez toutes les 2 secondes et mettez en veille, (2) Lorsque vous créez votre SparkContext, donnez-lui un App_Name unique, (3) Lorsque vous voulez qu'il soit tué, utilisez java. file.io pour placer un fichier dans le dossier avec le nom App Name.


L'observateur analyse le nom de l'application l'utilise dans le grep ci-dessus, identifie le pid et le tue. Désolé, il n'y a vraiment pas de moyen facile de supprimer ces emplois de manière dynamique dans Spark.


Merci pour les détails. Ci-dessous, j'ai posté le code, cela a fonctionné pour moi.



0
votes

Vous pouvez ouvrir une autre session et voir si votre application Spark est toujours en cours d'exécution -

yarn application -kill <app_id>

puis tuer votre application si elle est toujours en cours d'exécution,

yarn application -list <app_id>


2 commentaires

Merci Ajay pour la réponse. Je n'utilise pas de fil ici, l'exception est de gérer par programme


Je ne suis pas sûr, mais vous pouvez essayer d'utiliser le crochet d'arrêt pour arrêter correctement l'application. Bonne chance.



0
votes

J'ai trouvé un moyen de résoudre mon problème avec le code ci-dessous. Merci pour toutes vos réponses

from pyspark import SparkConf
from pyspark import SparkContext

if __name__ == "__main__":
    conf = SparkConf().setAppName("TEST")
    conf.set("spark.scheduler.mode", "FAIR")
    sc = SparkContext(conf=conf)

    while True:
        if sc._jsc.sc().isStopped():
            break
        print("Test application")


0 commentaires