一、介绍
有时候集群上会出现任务处理延迟的情况,导致很多任务堆积在哪里,如果直接kill,会导致数据丢失,那么如何才能够优雅停止呢?
在driver端启动一个线程定时检查hdfs上的一个目录标记,然后调用jssc.stop()方法来停止,这样只是告诉driver不要再发送任务过去了,等待集群的任务执行完就退出。
二、代码实现
````
public class StreamStopDemo {
public static void main(String[] args) throws InterruptedException {
SparkConf conf = new SparkConf();
JavaSparkContext context = new JavaSparkContext(conf);
JavaStreamingContext jssc = new JavaStreamingContext(context, Seconds.apply(20));
// do xxxx
new Timer().schedule(new TimerTask() {
@Override
public void run() {
File file = new File("/apps/stopFlag");
if (file.exists()){
jssc.stop();
}
}
}, 60 * 1000, 60 * 1000);
jssc.start();
jssc.awaitTermination();
}
}
````