我正在尝试使用文件监视器条件优雅地停止在纱线群集模式下运行的火花流应用程序。我还设置了条件
sparkConf.set("spark.streaming.stopGracefullyOnShutdown", "true");
当我在yarn-client模式下运行应用程序并发出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()