sparkstreaming的状态定时清除

两种方式:
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,把代码嵌入进去,打开我的注释再运行,就可以测试下是不是能行了。

猜你喜欢

转载自blog.csdn.net/qq_39719415/article/details/90599894
今日推荐