如何在收到所有输入数据后停止Spark Streaming Context?

时间:2016-05-05 17:35:56

标签: apache-spark spark-streaming

使用套接字连接我收到一个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消息所需的实际时间无关。

我该怎么做? 非常感谢你。

0 个答案:

没有答案