根据spark streaming documentation:
同时JVM中只能有一个
StreamingContext
处于活动状态。
我有一些场景,其中多个应用程序可以尝试在同一JVM中启动流式上下文。
为了尝试优雅地处理这个场景,我使用以下代码:
private static StreamingContext getStreamingContext(SparkSession spark) {
if (StreamingContext.getActive().isEmpty()) {
return new StreamingContext(spark.sparkContext(), getBatchDuration(spark));
} else {
return StreamingContext.getActive().get();
}
}
以上方法是否正确或我应该等待终止现有的流媒体上下文并创建这样的新内容:
private static StreamingContext getStreamingContext(SparkSession spark) {
if (StreamingContext.getActive().isDefined()){
StreamingContext.getActive().get().awaitTermination();
}
return new StreamingContext(spark.sparkContext(), getBatchDuration(spark));
}
我正在创建JavaStreamingContext
,如下所示:
JavaStreamingContext jsc = new JavaStreamingContext(getStreamingContext(spark));