sparkstreaming的状态定时清除

SparkStreaming通常部署在Linux上7*24运行,若不清除状态信息,内部数据会增大,checkpoint变慢。对于一天一统计的业务可定时清除,介绍了两种重启Spark任务的方式,一是用shell脚本,二是利用特殊方法定时结束再启动,还给出Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两种方式:
sparkStreaming一般都是部署在linux上的,且7*24运行,如果不去清除状态信息,内部数据会非常大,checkpoint也会越来越慢。一般对于一天一统计的业务可以去定时清除。
1:可以写shell脚本去重启spark任务,通过ps指令找到spark-submit的进程号,kill -9强制结束进程,然后再重启即可。
2:利用spark的特殊方法去定时结束sparkStreaming程序,再调用脚本去启动sparkStreaming程序(推荐)。
既然是推荐了,那就必须给出代码干货了,哈哈,干货如下:
在main函数中最后启动sparkStreaming程序时这样写(java写的,scala的也有对应的API,可以参考思路):

		jsc.start();
		jsc.awaitTerminationOrTimeout(getTime(System.currentTimeMillis()));
//		System.out.println(new Date());
//		System.out.println("Spark Application End!");
		jsc.close();
/**
*设置具体结束时间,这里我设置的是每天的晚上11点59分结束,然后在下一天的00:00调用
*spark的启动脚本
*/	
    public static Long getTime(Long currentTimeStamp) {
		Calendar calendar = Calendar.getInstance();
		int year = calendar.get(Calendar.YEAR);
		int month = calendar.get(Calendar.MONTH);
		int day = calendar.get(Calendar.DAY_OF_MONTH);
		//具体时间的设置
		Date date = new Date(year-1900, month, day, 23, 59, 0);
		return date.getTime()-currentTimeStamp;
	}

小伙伴们可以自己写一个wordCount,把代码嵌入进去,打开我的注释再运行,就可以测试下是不是能行了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值