web-dev-qa-db-ja.com

sparkストリーミングジョブを停止するにはどうすればよいですか?

Spark連続して実行されているストリーミングジョブがあります。ジョブを正常に停止するにはどうすればよいですか?ジョブモニタリングでシャットダウンフックを接続し、SIGTERMを送信する通常の推奨事項を読みました。ジョブ。

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

動作しているように見えますが、ジョブを停止する最もクリーンな方法のようには見えません。ここに何かが足りませんか?

コードの観点からは理にかなっているかもしれませんが、クラスター環境でこれをどのように使用しますか? spark=ストリーミングジョブ(クラスター内のすべてのノードにジョブを分散する)を開始する場合、ジョブのPIDとジョブが実行されていたノードを追跡する必要があります。最後に、プロセスを停止する必要がある場合、ジョブが実行されたノードとそのPIDを追跡する必要があります。ストリーミングジョブのジョブ制御のより簡単な方法があることを望んでいました。

27
Saket

SIGTERMを送信せずに次のコマンドを実行すると、クラスターモードでストリーミングコンテキストを停止できます。これにより、スレッドフックを使用して明示的に停止する必要なく、ストリーミングコンテキストが停止します。

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

-$ MASTER_REST_URLは、sparkドライバー、すなわちspark:// localhost:6066のようなものの残りのURLです。

-$ DRIVER_IDは、driver-20150915145601-0000のようなものです

sparkでアプリを正常に停止したい場合は、sparkアプリが最初に送信されたときに次のシステムプロパティを設定してみてください( http ://spark.Apache.org/docs/latest/submitting-applications.html 設定時spark構成プロパティ)。

spark.streaming.stopGracefullyOnShutdown=true

これは公式には文書化されていませんが、1.4のソースコードを見ることからこれを集めました。このフラグは、スタンドアロンモードで使用されます。クラスターモードでまだテストしていません。

私はspark 1.4。*

21
ud3sh