Как убить искровое приложение изящно - PullRequest
1 голос
/ 15 апреля 2020

У меня есть процесс (в scala), запущенный в искровом кластере, который обрабатывает некоторые данные, загружает результат и обновляет состояние обработки. Я хочу, чтобы обновление состояния загрузки и обработки выполнялось в режиме atomi c, так как это состояние крайне важно для возобновления работы и избежания двойной обработки. Необходимо регулярно завершать работающее задание и запускать новое всякий раз, когда мы хотим обновить банку. Убивая задание, я хочу обработать операцию atomi c и аккуратно выйти либо до загрузки, либо дождаться завершения загрузки и обновления состояния обработки. Как этого можно достичь? Если мы используем API пряжи для уничтожения приложения, оно может внезапно выйти из несовместимого состояния. Как лучше всего справиться с этим?

1 Ответ

3 голосов
/ 15 апреля 2020

В сети есть несколько хороших блогов . По сути, вы включаете постепенное отключение в своих конфигурациях с помощью

sparkConf.set(“spark.streaming.stopGracefullyOnShutdown","true") 

. Вы можете просто установить эту конфигурацию и затем вызывать как обычно методы ss c .start () и ss c .awaitTermination () для запуска Ваша работа.

Как описано в сообщении в блоге, сигнал можно передать следующим образом:

ps -ef | grep spark |  grep <DriverProgramName> | awk '{print $2}'   | xargs kill  -SIGTERM
e.g. ps -ef | grep spark |  grep DataPipelineStreamDriver | awk '{print $2}'   | xargs kill  -SIGTERM

Эта статья также очень хорошо объясняет это.

...