2、如何优雅地停止spark-streaming?

一、介绍

有时候集群上会出现任务处理延迟的情况,导致很多任务堆积在哪里,如果直接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();
    }
}
````

转载于:https://my.oschina.net/liufukin/blog/796497

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值