Получать уведомление, если хост-сеанс Spark умирает - PullRequest
3 голосов
/ 16 июня 2020

У меня есть давно работающее приложение Python 3.6, которое размещает сеанс PySpark 2.4.6 на YARN. Я хотел бы иметь возможность получать уведомления / иметь метод, вызываемый, если сеанс Spark вылетает / умирает, чтобы я мог автоматически перезапустить его.

Я бы хотел сделать это заранее, а не упаковывать каждый вызов к сеансу и обнаружению ошибок, когда сеанс закрывается, а затем заставляет пользователей ждать, пока сеанс перезапустится.

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Используя { ссылка } в качестве отправной точки, вы можете создать слушателя и добавить его в сеанс. Когда приложение завершает работу, вы можете выполнить обратный вызов, чтобы перезапустить приложение.

SparkListener определен в приведенном выше ответе ref'd.

class SparkApplicationEndListener(SparkListener):
    def __init__(self, applicationEndCallback):
        self.applicationEndCallback = applicationEndCallback

    def onApplicationEnd(self, applicationEnd):
        if self.applicationEndCallback != None:
            self.applicationEndCallback(applicationEnd)

########

def handleSparkApplicationEnd(app_end):
    print(app_end.toString())
    sparkSession = buildSparkSession()

def buildSparkSession():
    #......
    sparkSession.sparkContext._gateway.start_callback_server()
    listener = SparkApplicationEndListener(handleSparkApplicationEnd)
    sparkSession.sparkContext._jsc.sc().addSparkListener(listener)
2 голосов
/ 16 июня 2020

Для Yarn доступен REST API . Через определенные промежутки времени вы можете запрашивать все запущенные в данный момент приложения

http://rm-http-address:port/ws/v1/cluster/apps?states=RUNNING

, а затем проверять, является ли ваш сеанс PySpark частью результата.

...