DStreaming中的awaitTermination尚未完成对接收到的数据的处理

时间:2019-02-16 22:53:15

标签: apache-spark pyspark

与往常一样,在我们开发的(py)spark应用程序中,我们在正常停止该应用程序时遇到问题。我们成功完成的工作是将logLevel设置为“ OFF”,并通过KeyboardInterrupt或超时对流进行设置(通过ps发送-SIGTERM似乎与Keyboard Interrupt相同)。在那之后,至少应该这样认为,Spark应该处理已经发送到DStream的数据,即在完成之前停止ssc(流上下文),而不是sc(火花上下文)。我们甚至可以看到执行仍在执行中。我们认为awaitTermination实际上会调用ssc.stop(False,True)。 GitHub上的源代码似乎模棱两可,因为正在使用许多内部对象,例如_jssc 使用,并且代码在某种意义上是封闭的。我们看不到awaitTermination实际做什么。

但是,我们已经将控制台输出添加到服务器,并且我们注意到接收到的数据没有被处理(完全)。由于Spark正在使节点上的所有内容崩溃,并且只是停止了Spark Context,因此出现了缝隙。除非在KeyboardInterrupt异常中进行处理(这会导致许多其他错误和异常,有时甚至无法关闭应用程序),否则在pyspark中似乎无法在代码中调用ssc.stop(False,True)-我们被迫将其杀死。发送终止信号以调用ssc.stop似乎很乏味,因为这会使应用程序变慢。

任何帮助,想法或纠正都受到高度赞赏。

0 个答案:

没有答案