一直运行的
等作业运行完再关闭
我们都知道,
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
通过Spark内置机制关闭
其实Spark内置就为我们提供了一种优雅的方法来关闭长期运行的Streaming作业,我们来看看 StreamingContext 类中定义的一个 stop 方法: def stop(stopSparkContext: Boolean, stopGracefully: Boolean)
官方文档对其解释是:Stop the execution of the streams, with option of ensuring all received data has been processed. 控制所有接收的数据是否被处理的参数就是 stopGracefully,如果我们将它设置为true,Spark则会等待所有接收的数据被处理完成,然后再关闭计算引擎,这样就可以避免数据的丢失。现在的问题是我们在哪里调用这个stop方法?
Spark 1.4版本之前
在Spark 1.4版本之前,我们需要手动调用这个 stop 方法,一种比较合适的方式是通过 Runtime.getRuntime().addShutdownHook 来添加一个钩子,其会在JVM关闭的之前执行传递给他的函数,如下: Runtime.getRuntime().addShutdownHook(new Thread() {
override def run() {
log(“Gracefully stop Spark Str