使用套接字连接我收到一个JavaInputDStream,它每两秒向Spark Cluster发送一条JSON消息。我有大约60个消息,所以接收所有JSON数据大约需要2分钟。
这是我的问题:当我停止接收JSON行作为输入时,如何完全停止我的SparkStreamingContext()?
如果我使用ssc.stop()方法,上下文在执行一次后停止,所以我甚至没有开始接收数据。
如果我使用ssc.awaitTerminationOrTimeout(long time)
,它也没有帮助,因为它会在time
之后停止上下文,这将始终略大于我希望上下文停止的确切时间。
正如您可能已经猜到的那样,我的目标是衡量我的代码处理所有JSON消息的确切时间,我这样做是为了实现它:
SparkConf sparkConf = new SparkConf().setMaster("local[2]").setAppName("sparkstreaminggetjson");
// JavaSparkContext sc=new JavaSparkContext(sparkConf);
JavaStreamingContext ssc = new JavaStreamingContext(sparkConf, Durations.seconds(2));
long duration = System.currentTimeMillis();
//receive and process the JSON messages
ssc.start();
ssc.awaitTerminationOrTimeout(180000);
duration = System.currentTimeMillis()-duration;
这样,持续时间为180000,与处理所有JSON消息所需的实际时间无关。
我该怎么做? 非常感谢你。