Как остановить работу с искровым потоком?
У меня есть работа Spark Streaming, которая работает непрерывно. Как я могу прекратить работу изящно? Я прочитал обычные рекомендации по прикреплению крюка отключения при мониторинге работы и отправке SIGTERM на задание.
sys.ShutdownHookThread {
logger.info("Gracefully stopping Application...")
ssc.stop(stopSparkContext = true, stopGracefully = true)
logger.info("Application stopped gracefully")
}
Кажется, что это работает, но не похоже на самый чистый способ остановить работу. Я что-то упустил?
С точки зрения кода это может иметь смысл, но как вы это используете в кластерной среде? Если мы начнем работу с искровым потоком (мы распределяем задания на всех узлах в кластере), нам нужно будет отслеживать PID для задания и node, на котором он был запущен. Наконец, когда нам нужно остановить процесс, нам нужно отслеживать, для чего node выполнялось задание, и PID для этого. Я просто надеялся, что будет более простой способ управления заданиями для потоковой работы.
Ответы
Ответ 1
Вы можете остановить свой потоковый контекст в режиме кластера, выполнив следующую команду без необходимости отправки SIGTERM. Это остановит контекст потоковой передачи, если вам не нужно явно останавливать его с помощью привязки потока.
$SPARK_HOME_DIR/bin/spark-submit --master $MASTER_REST_URL --kill $DRIVER_ID
- $MASTER_REST_URL - это остальная ссылка искрового драйвера, то есть нечто вроде spark://localhost: 6066
- $DRIVER_ID - это что-то вроде драйвера-20150915145601-0000
Если вы хотите, чтобы искра прекращала ваше приложение изящно, вы можете попробовать установить следующее системное свойство, когда ваше искровое приложение первоначально отправлено (см. http://spark.apache.org/docs/latest/submitting-applications.html об установке искры свойства конфигурации).
spark.streaming.stopGracefullyOnShutdown=true
Это официально не документировано, и я собрал это, посмотрев исходный код 1.4. Этот флаг соблюдается в автономном режиме. Я еще не тестировал его в кластерном режиме.
Я работаю с искрой 1.4. *
Ответ 2
Если вам нужно всего лишь остановить запуск потокового приложения, то самый простой способ - через интерфейс администратора Spark (вы можете найти его URL в журналах запуска Spark master).
В пользовательском интерфейсе есть раздел, в котором показаны запущенные приложения потоковой передачи, и рядом с каждым идентификатором приложения есть маленькие кнопки (kill)
url.
Ответ 3
Официально сейчас, пожалуйста, ознакомьтесь с оригинальной документацией apache,
http://spark.apache.org/docs/latest/configuration.html#spark-streaming