前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SparkStreaming如何优雅的停止服务

SparkStreaming如何优雅的停止服务

作者头像
我是攻城师
发布2018-05-14 17:08:39
2.1K0
发布2018-05-14 17:08:39
举报
文章被收录于专栏:我是攻城师

我们都知道SparkStreaming程序是一个长服务,一旦运转起来不会轻易停掉,那么如果我们想要停掉正在运行的程序应该怎么做呢?

如果运行的是spark on yarn模式直接使用

代码语言:javascript
复制
yarn application -kill  taskId

暴力停掉sparkstreaming是有可能出现问题的,比如你的数据源是kafka,已经加载了一批数据到sparkstreaming中正在处理,如果中途停掉,这个批次的数据很有可能没有处理完,就被强制stop了,下次启动时候会重复消费或者部分数据丢失。

如何解决?

1.4之前的版本,需要一个钩子函数:

1.4之后的版本,比较简单,只需要在SparkConf里面设置下面的参数即可:

然后,如果需要停掉sparkstreaming程序时:

(1)登录spark ui页面在executors页面找到driver程序所在的机器

(2)使用ssh命令登录这台机器上,执行下面的命令通过端口号找到主进程然后kill掉

注意上面的操作执行后,sparkstreaming程序,并不会立即停止,而是会把当前的批处理里面的数据处理完毕后 才会停掉,此间sparkstreaming不会再消费kafka的数据,这样以来就能保证结果不丢和重复。

此外还有一个问题是,spark on yarn模式下,默认的情况driver程序的挂了,会自动再重启一次,作为高可用,也就是上面的操作 你可能要执行两次,才能真能的停掉程序,当然我们也可以设置驱动程序一次挂掉之后,就真的挂掉了,这样就没有容灾机制了,需要慎重考虑:

代码语言:javascript
复制
 --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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档