周期性清除Spark Streaming流状态的方法是什么


本篇文章为大家展示了周期性清除Spark Streaming流状态的方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在Spark Streaming程序中,我们经常需要使用有状态的流来统计一些累积性的指标,比如各个商品的PV。简单的代码描述如下,使用mapWithState()算子:现在的问题是,PV并不是一直累加的,而是每天归零,重新统计数据。要达到在凌晨0点清除状态的目的,有以下两种方法。用crontab、Azkaban等在凌晨0点调度执行下面的Shell脚本:这种方式最简单,也不需要对程序本身做任何改动。但随着同时运行的Streaming任务越来越多,就会显得越来越累赘了。在程序启动之前,先计算出当前时间点距离第二天凌晨0点的毫秒数:然后将Streaming程序的主要逻辑写在while(true)循环中,并且不像平常一样调用S 香港云主机treamingContext.awaitTermination()方法,而改用awaitTerminationOrTimeout()方法,即:
在经过msTillTomorrow毫秒之后,StreamingContext就会超时,再调用其stop()方法(注意两个参数,stopSparkContext表示是否停止关联的SparkContext,stopGracefully表示是否优雅停止),就可以停止并重启StreamingContext。两种方法都是仍然采用Spark Streaming的机制进行状态计算的。如果其他条件允许的话,我们还可以抛弃mapWithState(),直接借助外部存储自己维护状态。比如将Redis的Key设计product_pv:[product_id]:[date],然后在Spark Streaming的每个批次中使用incrby指令,就能方便地统计PV了,不必考虑定时的问题。上述内容就是周期性清除Spark Streaming流状态的方法是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注开发云行业资讯频道。

相关推荐: C++中为什么直接拥有一个对象所有权时永远不要抛出异常

这篇文章主要介绍“C++中为什么直接拥有一个对象所有权时永远不要抛出异常”,在日常操作中,相信很多人在C++中为什么直接拥有一个对象所有权时永远不要抛出异常问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++中为什么直接拥有一个…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/22 18:28
Next 09/22 18:40

相关推荐