Java 以编程方式调用streamingcontext.stop()时,Spark streaming挂起

Java 以编程方式调用streamingcontext.stop()时,Spark streaming挂起,java,hadoop,apache-spark,spark-streaming,yarn,Java,Hadoop,Apache Spark,Spark Streaming,Yarn,我试图使用文件监视程序条件优雅地停止一个在纱线集群模式下运行的spark streaming应用程序。我还设置了该条件 sparkConf.set(“spark.streaming.stopGracefullyOnShutdown”、“true”) 当我在Thread客户端模式下运行应用程序并发出SIGTERM以优雅地终止应用程序时,这一点很好。当我切换到纱线簇模式时,出现了问题,我无法访问驱动机器发出SIGTERM,因此我使用以下逻辑[ssc.stop()]以编程方式关闭应用程序。观察到的行为

我试图使用文件监视程序条件优雅地停止一个在纱线集群模式下运行的spark streaming应用程序。我还设置了该条件

sparkConf.set(“spark.streaming.stopGracefullyOnShutdown”、“true”)

当我在Thread客户端模式下运行应用程序并发出
SIGTERM
以优雅地终止应用程序时,这一点很好。当我切换到纱线簇模式时,出现了问题,我无法访问驱动机器发出
SIGTERM
,因此我使用以下逻辑
[ssc.stop()]
以编程方式关闭应用程序。观察到的行为是Streamingcontext停止,应用程序挂起,而不处理挂起的微批处理。我是否遗漏了以干净的方式关闭应用程序的内容

        Dstream.foreachRDD(new VoidFunction<JavaRDD<String>>() {

            private static final long serialVersionUID = 1239370L;

            @Override
            public void call(JavaRDD<String> inRDD) throws Exception {
            try
            {
                 outRDD = applyTransformation(inRDD)  
                 storeToFs(outRDD)  
            }
            finally
            {
                if(!checkFileExists())
               {
                ssc.stop()
               }
           }
           }

           ssc.start()
           ssc.awaitTermination()
Dstream.foreachRDD(新的VoidFunction(){
私有静态最终长serialVersionUID=1239370L;
@凌驾
公共void调用(JavaRDD inRDD)引发异常{
尝试
{
outRDD=应用程序转换(inRDD)
仓库数量(超出)
}
最后
{
如果(!checkFileExists())
{
ssc.停止()
}
}
}
ssc.start()
ssc.终止协议()