Почему 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
Не могли бы вы проверить, достаточно ли памяти вашего драйвера или нет? Я решил эту проблему
- увеличить память драйвера
-
настроить GC:
--conf spark.cleaner.periodicGC.interval=60
--conf spark.cleaner.referenceTracking.blocking=false