我们都知道SparkStreaming程序是一个长服务,一旦运转起来不会轻易停掉,那么如果我们想要停掉正在运行的程序应该怎么做呢?
如果运行的是spark on yarn模式直接使用
yarn application -kill taskId
暴力停掉sparkstreaming是有可能出现问题的,比如你的数据源是kafka,已经加载了一批数据到sparkstreaming中正在处理,如果中途停掉,这个批次的数据很有可能没有处理完,就被强制stop了,下次启动时候会重复消费或者部分数据丢失。
如何解决?
1.4之前的版本,需要一个钩子函数:
sys.ShutdownHookThread
{
log.info("Gracefully stopping Spark Streaming Application")
ssc.stop(true, true)
log.info("Application stopped")
}
1.4之后的版本,比较简单,只需要在SparkConf里面设置下面的参数即可:
sparkConf.set("spark.streaming.stopGracefullyOnShutdown","true")
然后,如果需要停掉sparkstreaming程序时:
(1)登录spark ui页面在executors页面找到driver程序所在的机器
(2)使用ssh命令登录这台机器上,执行下面的命令通过端口号找到主进程然后kill掉
ss -tanlp | grep 55197|awk '{print $6}'|awk -F, '{print $2}'|xargs kill -15
注意上面的操作执行后,sparkstreaming程序,并不会立即停止,而是会把当前的批处理里面的数据处理完毕后
才会停掉,此间sparkstreaming不会再消费kafka的数据,这样以来就能保证结果不丢和重复。
此外还有一个问题是,spark on yarn模式下,默认的情况driver程序的挂了,会自动再重启一次,作为高可用,也就是上面的操作
你可能要执行两次,才能真能的停掉程序,当然我们也可以设置驱动程序一次挂掉之后,就真的挂掉了,这样就没有容灾机制了,需要慎重考虑:
--conf spark.yarn.maxAppAttempts=1
上面的步骤还是有点复杂的,当然在网上有朋友提出在HDFS上建立一个文件,通过程序主动扫描来判断是否应该停止,这样的话不需要经历前面停止的繁琐的方式,后面有机会可以尝试一下。
参考文章:
http://blog.parseconsulting.com/2017/02/how-to-shutdown-spark-streaming-job.html
http://why-not-learn-something.blogspot.jp/2016/05/apache-spark-streaming-how-to-do.html
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
一个完善的Spark Streaming二次封装开源框架,包含:实时流任务调度、kafka偏移量管理,web后台管理,web api启动、停止spark streaming,宕机告警、自动重启等等功能支持,用户只需要关心业务代码,无需关注繁琐的...
java的sparkstreaming连接kafka的例子,kafka生产者生产消息,消费者读取消息,sparkstreaming读取kafka小区并进行存储iotdb数据库。
sparkStreaming消费数据不丢失,sparkStreaming消费数据不丢失
spark Streaming和structed streaming分析,理解整个 Spark Streaming 的模块划分和代码逻辑。
1.理解Spark Streaming的工作流程。 2.理解Spark Streaming的工作原理。 3.学会使用Spark Streaming处理流式数据。 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 三、实验内容 (一)...
1.Spark Streaming整合Flume需要的安装包. 2. Spark Streaming拉取Flume数据的flume配置文件.conf 3. Flume向Spark Streaming推数据的flume配置文件.conf
(1)利用SparkStreaming从文件目录读入日志信息,日志内容包含: ”日志级别、函数名、日志内容“ 三个字段,字段之间以空格拆分。请看数据源的文件。 (2)对读入都日志信息流进行指定筛选出日志级别为error或warn...
spark streaming streaming
spark Streaming的原理介绍和与storm的对比
基于 Flume+ Kafka+ Spark Streaming 实现实时监控输出日志的报警系统的 Spark Streaming 程序代码。 基于 Flume+Kafka+Spark Streaming 实现实时监控输出日志的报警系统的 Spark Streaming 程序代码,博客链接: ...
写的非常好,早了好久才找到。SparkStreaming预研报告
Scala代码积累之spark streaming kafka 数据存入到hive源码实例,Scala代码积累之spark streaming kafka 数据存入到hive源码实例。
包含kafka消息中间件的使用和Spark Streaming的示例。
flume+Logstash+Kafka+Spark Streaming进行实时日志处理分析【大数据】
讲述Storm与sparkStreaming分别用法与区别,在操作流程等。
Spark Streaming Programming Guide 翻译+个人学习笔记整理
06Spark Streaming原理和实践
spark之sparkStreaming 理解,总结了自己的理解,欢迎大家下载观看!
本文SparkStream从磁盘文件、HDFS、KAFKA获取数据源,以单词频次统计作为入门案例,介绍了SparkStream模块API的使用。同时介绍了SparkStream的特点