Остановить бурю: верный путь

Есть ли чистый способ остановить шторм, не убивая его с помощью "kill XXX", где XXX - PID?

Я запускаю "storm kill имя-топологии", чтобы уничтожить топологию, но после этого есть ли чистый способ завершить работу рабочих, нимб, супервизора и пользовательского интерфейса?

Я не нашел в документации соответствующей команды: https://github.com/nathanmarz/storm/wiki/Command-line-client


person zenbeni    schedule 12.11.2013    source источник


Ответы (4)


Команда для уничтожения топологии (как вы правильно заметили):

storm kill topology-name

Чтобы выключить кластер, вам необходимо выполнить следующую команду на каждом узле:

sudo service supervisord stop

Примечание. дайте supervisord несколько секунд для завершения всех процессов. Обратите внимание, что попытка запустить supervisorctl, когда сам супервизор остановлен, приведет к сообщению об ошибке (похоже, это известная проблема пользовательского интерфейса в supervisord 2.x)

Из это документация

Как убить ВСЕ процессы Storm, включая рабочие процессы? Любые рабочие потоки (запущенные демонами Supervisor на подчиненных узлах), которые выполняются, когда вы останавливаете кластер, продолжат работу. Это преднамеренное дизайнерское решение Storm, потому что это означает, что сбой / перезапуск демонов Nimbus и Supervisor не повлияет на какие-либо работающие топологии в Storm. Обратной стороной является то, что вам нужно приложить дополнительные усилия для полной остановки всех связанных со Storm процессов в кластере.

Если вы хотите убить ВСЕ процессы, выполните следующую процедуру на подчиненных узлах:

$ sudo supervisorctl stop storm-supervisor
$ sudo pkill -TERM -u storm -f 'backtype.storm.daemon.worker'
person user2720864    schedule 12.11.2013
comment
Я попробую это, спасибо, что указал на Супервайзера с отличной ссылкой. - person zenbeni; 12.11.2013
comment
Он работает хорошо, все же мне пришлось поставить полную команду (с java -server -Dstorm.options ...) для супервизора для работы со штормом в supervisord.conf, это похоже на ошибку python между штормом и супервизором. Отлично, чтобы все остановить и получить контроль с автоматическим перезапуском и журналами. - person zenbeni; 12.11.2013
comment
@zenbeni - если вы считаете, что это ошибка, сообщите об этом через систему отслеживания ошибок / проблем. Если сообщить об этом ›› нам ‹<, проблема не будет решена. - person Stephen C; 21.08.2014

Со страницы, на которую вы указали:

убить

Синтаксис: имя-топологии уничтожения шторма [-w-время-секунды]

Удаляет топологию с именем имя-топологии. Storm сначала деактивирует носики топологии на время тайм-аута сообщения топологии, чтобы позволить всем сообщениям, обрабатываемым в данный момент, завершить обработку. Затем Storm отключит рабочих и очистит их состояние. Вы можете изменить время ожидания Storm между деактивацией и выключением с помощью флага -w.

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

person Stephen C    schedule 12.11.2013
comment
+1, не нужно убивать рабочие процессы Storm вручную, так как storm kill topology-name убьет их за вас. После этого, когда в кластере больше не работают топологии, вы завершаете процессы Supervisor и Nimbus (и, возможно, процессы Storm UI и DRPC). - person schiavuzzi; 12.11.2013
comment
Это хорошо знать. Тем не менее, я считаю, что вам нужна некоторая абстракция по процессам шторма, потому что я не хочу вручную останавливать каждый процесс и перезапускать их. А бывают моменты, когда хочется, чтобы все выключилось. Супервизор кажется более элегантным, и я все равно просил не убивать каждый процесс, включая пользовательский интерфейс, нимб и супервизор (это делает супервизор, а не я). - person zenbeni; 12.11.2013
comment
Я понимаю. Да ... если у вас несколько топологий, этого недостаточно. - person Stephen C; 13.11.2013

Хорошо, если вы начали шторм как ./storm nimbus & ./storm supervisor & ./storm ui, тогда

после этого вы можете забыть идентификатор процесса, в этом случае вы можете использовать инструмент jps, чтобы узнать pid, а затем убить их как

$ JAVA_HOME / bin / jps

3201 Консоль Потребитель

7528 иен

2966 Кафка

3680 нимб

3681 руководитель

6749 Пусковая установка

2669 Кворум

сначала убить нимб

$ sudo kill 3681

$ sudo kill 3680

person Sam    schedule 12.07.2016

Если вы хотите уничтожить все топологии за один раз:

bin/storm kill `bin/storm list | grep <some common keyword>  | awk '{print $1}'` -w 5
person hakunahStorm69    schedule 26.06.2020