Подтвердить что ты не робот

Как остановить работу с искровым потоком?

У меня есть работа 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 для этого. Я просто надеялся, что будет более простой способ управления заданиями для потоковой работы.

4b9b3361

Ответ 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.