Scala 发送SIGTERM时,在Spark Streaming应用程序中优雅地终止当前批次

Scala 发送SIGTERM时,在Spark Streaming应用程序中优雅地终止当前批次,scala,apache-spark,spark-streaming,Scala,Apache Spark,Spark Streaming,我在EMR上运行一个Spark流媒体应用程序,从卡夫卡读取数据 我希望能够以优雅的方式使用warn application-kill${applicationId}终止应用程序。据我所知,此命令首先向应用程序发送SIGTERM,然后发送SIGKILL,具体取决于SIGKILL.ms之前的warn.nodemanager.sleep delay的值,该值默认为250ms 但是,尽管将spark.streaming.stopGracefullyOnShutdown设置为true,并将sigkill.

我在EMR上运行一个Spark流媒体应用程序,从卡夫卡读取数据

我希望能够以优雅的方式使用
warn application-kill${applicationId}
终止应用程序。据我所知,此命令首先向应用程序发送SIGTERM,然后发送SIGKILL,具体取决于SIGKILL.ms之前的
warn.nodemanager.sleep delay的值,该值默认为
250ms

但是,尽管将
spark.streaming.stopGracefullyOnShutdown
设置为
true
,并将
sigkill.ms之前的Thread.nodemanager.sleep delay设置为非常高的值,似乎关机并不优雅,因为在我使用SparkSession时,StreamingContext仅使用
spark.streaming.stopGracefullyOnShutdown

由于似乎无法保证JVM会在SparkSession通过SparkContext()提供的关闭之前调用定制的关闭钩子,因此在接收到SIGTERM时,是否有其他解决方案来实现优雅的关闭