Как убить приложение apache spark, работающее в фоновом режиме, после его закрытия из веб-интерфейса SPARK

Код ниже успешно создает контекст искры, когда я отправляю с использованием spark submit и работает нормально.

Когда я убиваю приложение под Running Applications из веб-интерфейса Apache spark, состояние приложения показывает killed, но после убийства также печатает Test application на экране:

Приложение, работающее в веб-интерфейсе apache spark:

введите здесь описание изображения

Приложение убито с помощью кнопки «убить» в веб-интерфейсе искры

введите здесь описание изображения

Все еще печатает сообщение на экране после закрытия приложения

введите здесь описание изображения

Нужно решение для автоматического уничтожения задания python, когда я убиваю 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")

person Siddeshwar    schedule 20.06.2019    source источник
comment
Вы запускаете приложение Spark поверх Yarn. Если да, то убейте его из Yarn с помощью команды Yarn application -kill ‹application id›   -  person Nikk    schedule 20.06.2019
comment
Отправка через редактор команд spark-submit test_spark.py вручную, и я вижу вывод на печать в том же редакторе команд.   -  person Siddeshwar    schedule 20.06.2019


Ответы (3)


Можно по старинке.

Запустите ps -ef и найдите идентификатор задания Java. Затем запустите убить -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
person afeldman    schedule 25.06.2019
comment
Спасибо за ответ. Могу ли я справиться с программой Python? Причина: в производственной среде я могу отправлять несколько заданий искры, и каждое задание содержит отдельный искровой контекст. Я ожидаю, что если я уничтожу сеанс контекста искры в пользовательском интерфейсе искры, это должно убить выполнение всего приложения. - person Siddeshwar; 25.06.2019
comment
Допустим, я запускаю 10 заданий Spark, каждое со своим собственным SparkContext, тогда у каждого из них должен быть свой собственный PID или Job_ID для уничтожения. На ваш вопрос, нет, вы можете убить прямо из Spark (время от времени работа выходит из строя), как вы видели, и не умирает. Однако, если вам интересно, вы можете настроить наблюдателя на уничтожение по команде. (1) На высоком уровне заставьте программу просматривать папку, проверять каждые 2 секунды и спать, (2) Когда вы создаете свой SparkContext, дайте ему уникальное имя приложения, (3) Если вы хотите, чтобы он был убит, используйте java. file.io, чтобы поместить файл в папку с именем App Name. - person afeldman; 25.06.2019
comment
Наблюдатель анализирует App_Name, использует его в приведенном выше grep, идентифицирует pid и уничтожает его. Извините, на самом деле нет простого способа динамически убить эти задания в Spark. - person afeldman; 25.06.2019
comment
Спасибо за подробности. Ниже я разместил код, который у меня сработал. - person Siddeshwar; 26.06.2019

Вы можете открыть другой сеанс и посмотреть, работает ли все еще ваше искровое приложение.

yarn application -list <app_id>

затем убейте ваше приложение, если оно все еще работает,

yarn application -kill <app_id>
person Ajay Ahuja    schedule 25.06.2019
comment
Аджай спасибо за ответ. Я не использую здесь пряжу, исключение заключается в программной обработке - person Siddeshwar; 25.06.2019
comment
Я не уверен, но вы можете попробовать использовать перехватчик выключения, чтобы корректно закрыть приложение. Удачи. - person Ajay Ahuja; 25.06.2019

Я нашел способ решить свою проблему с помощью приведенного ниже кода. Спасибо за все ваши ответы

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")
person Siddeshwar    schedule 26.06.2019