Почему SparkContext случайно закрывается и как его перезапустить из Zeppelin?

Я работаю в Zeppelin, написав запросы spark-sql, и иногда я внезапно начинаю получать эту ошибку (после изменения кода):

Cannot call methods on a stopped SparkContext.

Затем вывод говорит далее:

The currently active SparkContext was created at:

(No active SparkContext.)

Это, очевидно, не имеет смысла. Это ошибка в Цеппелине? Или я делаю что-то неправильно? Как перезапустить SparkContext?

спасибо

Ответ 1

Я столкнулся с этой проблемой пару раз.

Если вы устанавливаете своего мастера как пряжу-клиента, это может быть связано с остановкой/перезапуском диспетчера ресурсов, процесс интерпретатора может все еще работать, но контекст Spark (который является приложением для пряжи) больше не существует.

Вы можете проверить, работает ли Spark Context, консультируясь с веб-интерфейсом менеджера ресурсов и проверяйте, есть ли приложение с именем Zeppelin.

Иногда проблема ретрансляции процесса интерпретатора из Zeppelin (вкладка интерпретатора → искра → перезагрузка) решит проблему.

В других случаях вам необходимо:

  • убить процесс интерпретации Spark из командной строки
  • удалить PID файл Spark Interpreter
  • и в следующий раз, когда вы начнете абзац, он начнет новый контекст искры

Ответ 2

Я сталкиваюсь с той же проблемой, выполняющей несколько заданий в PySpark. Кажется, что в Spark 2.0.0 с SparkSession, когда я вызываю spark.stop() SparkSession вызывает следующую трассировку:

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

Затем, когда я пытаюсь создать новое задание с новым SparkContext, SparkSession возвращает тот же SparkContext, что и раньше, с self.jsc = None.

Я решил установить SparkSession._instantiatedContext = None после того, как spark.stop() заставил SparkSession создать новый SparkContext в следующий раз, когда я требую.

Это не лучший вариант, но тем временем он решает мою проблему.

Ответ 3

Я заметил эту проблему больше при запуске команд pyspark даже с объявлениями тривиальных переменных, которые выполняются в рабочем состоянии. Как упомянуто выше пользователем1314742, просто убить соответствующий PID решает эту проблему для меня.

например:

ps -ef | grep zeppelin

Здесь перезапуск Spark-интерпретатора и перезапуск zeppelin-ноутбука не решает проблему. Наверное, потому что он не может контролировать сам висел PID.

Ответ 4

Не могли бы вы проверить, достаточно ли памяти вашего драйвера или нет? Я решил эту проблему

  1. увеличить память драйвера
  2. настроить GC:

    --conf spark.cleaner.periodicGC.interval=60 
    --conf spark.cleaner.referenceTracking.blocking=false