web-dev-qa-db-fra.com

Comment arrêter un travail de streaming spark?

J'ai un Spark travail de streaming qui a été exécuté en continu. Comment puis-je arrêter le travail avec élégance? J'ai lu les recommandations habituelles d'attacher un crochet d'arrêt dans la surveillance du travail et d'envoyer un SIGTERM au emploi.

sys.ShutdownHookThread {
  logger.info("Gracefully stopping Application...")
  ssc.stop(stopSparkContext = true, stopGracefully = true)
  logger.info("Application stopped gracefully")
}

Cela semble fonctionner mais ne semble pas être le moyen le plus propre d'arrêter le travail. Est-ce que j'ai râté quelque chose?

Du point de vue du code, cela peut avoir du sens, mais comment l'utilisez-vous dans un environnement de cluster? Si nous démarrons un travail de streaming spark (nous distribuons les travaux sur tous les nœuds du cluster), nous devrons garder une trace du PID du travail et du nœud sur lequel il s'exécutait. Enfin, lorsque nous devons arrêter le processus, nous devons garder une trace du nœud sur lequel le travail était exécuté et du PID pour cela. J'espérais simplement qu'il y aurait un moyen plus simple de contrôler les travaux pour les travaux en streaming.

27
Saket

Vous pouvez arrêter votre contexte de streaming en mode cluster en exécutant la commande suivante sans avoir besoin d'envoyer un SIGTERM. Cela arrêtera le contexte de streaming sans que vous ayez besoin de l'arrêter explicitement à l'aide d'un crochet de thread.

$SPARK_HOME_DIR/bin/spark-submit --master $MASTER_REST_URL --kill $DRIVER_ID

- $ MASTER_REST_URL est l'url de repos du pilote spark, c'est-à-dire quelque chose comme spark: // localhost: 6066

- $ DRIVER_ID est quelque chose comme driver-20150915145601-0000

Si vous souhaitez que spark pour arrêter votre application avec élégance, vous pouvez essayer de définir la propriété système suivante lorsque votre application spark est initialement soumise (voir http : //spark.Apache.org/docs/latest/submitting-applications.html sur le paramètre spark).

spark.streaming.stopGracefullyOnShutdown=true

Ce n'est pas officiellement documenté, et je l'ai recueilli en regardant le code source 1.4. Ce drapeau est honoré en mode autonome. Je ne l'ai pas encore testé en mode cluster.

Je travaille avec spark 1.4. *

21
ud3sh