网上的怎么关闭SparkStreaming的文章一大堆,可我还是费了很大的力气才解决了我的问题。
我们都知道SparkStreaming程序是一个长服务,一旦运转起来不会轻易停掉,那么如果我们想要停掉正在运行的程序应该怎么做呢?
如果运行的是spark on yarn模式直接使用
# yarn application -kill taskId
暴力停掉sparkstreaming是有可能出现问题的,比如你的数据源是kafka,已经加载了一批数据到sparkstreaming中正在处理,如果中途停掉,这个批次的数据很有可能没有处理完,就被强制stop了,下次启动时候会重复消费或者部分数据丢失。
如果运行的是spark on yarn模式直接使用
# yarn application -kill taskId
暴力停掉sparkstreaming是有可能出现问题的,比如你的数据源是kafka,已经加载了一批数据到sparkstreaming中正在处理,如果中途停掉,这个批次的数据很有可能没有处理完,就被强制stop了,下次启动时候会重复消费或者部分数据丢失。
如何解决?
方案一: Spark1.4之前的版本,需要一个钩子函数(该方案弃用)
sys.ShutdownHookThread {
log.info("Gracefully stopping Spark Streaming Application")
ssc.stop(true, true)

本文介绍如何优雅地关闭Spark Streaming程序,避免数据丢失或重复。包括使用Spark参数、发送SIGTERM信号及利用HDFS进行通知的方法。
最低0.47元/天 解锁文章
1181





