分享

SparkStreaming怎么处理失败的Batch

erbin 发表于 2017-9-12 15:14:33 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 8299
在使用SparkStreaming+Kafka+Redis做一个实时的需求。测试的过程中遇到以下的问题
DirectStream读取kafka,数据经过处理后foreachRDD中保存到redis。
当SparkStreaming运行一段时间后,我把redis关了,可以看到程序在报connection refused错误,UI上看到batch都fail了,但是Streaming仍然在运行,也在持续的读取kafka。Streaming进程还在跑的话那checkpoint也没啥用啊,那么fail掉的那部分batch数据不就丢失了吗?
有什么好的方式处理这种情况吗?

已有(5)人评论

跳转到指定楼层
arsenduan 发表于 2017-9-12 16:08:54
checkpoint的作用是当sparkstreaming 挂掉的时候,恢复到最近的checkpoint。他是对于spark的。
这里面跟楼主的程序逻辑有关。
如果redis关掉了。这时候需要停止掉spark streaming读取。如果继续读,后面的数据也不能保存到redis。这里面spark streaming是管不了你的radis的,只能自己去实现。
回复

使用道具 举报

tntzbzc 发表于 2017-9-12 16:49:36
丢掉的数据,在spark streaming启动的时候,会重新读取的。checkpoint已经备份了。
回复

使用道具 举报

erbin 发表于 2017-9-12 16:57:43
arsenduan 发表于 2017-9-12 16:08
checkpoint的作用是当sparkstreaming 挂掉的时候,恢复到最近的checkpoint。他是对于spark的。
这里面跟楼 ...

恩谢谢,我关掉redis主要是为了模拟一下一些异常,想知道有没有办法重新处理这些失败的batch。
回复

使用道具 举报

erbin 发表于 2017-9-12 16:59:06
tntzbzc 发表于 2017-9-12 16:49
丢掉的数据,在spark streaming启动的时候,会重新读取的。checkpoint已经备份了。

谢谢,虽然batch job失败了,但是整个Spark Streaming还是跑着的,如果开启了CheckPoint,这个时候我重启一下SparkStreaming, 失败的batch会重新处理吗?
回复

使用道具 举报

tntzbzc 发表于 2017-9-12 17:11:08
本帖最后由 tntzbzc 于 2017-9-12 17:13 编辑
erbin 发表于 2017-9-12 16:59
谢谢,虽然batch job失败了,但是整个Spark Streaming还是跑着的,如果开启了CheckPoint,这个时候我重启 ...

如果spark没有挂掉,他应该是不会的。所以需要楼主在自己的逻辑中实现。如果redis或则检测到batch job失败了,就重启下spark streaming。这样他就会自动重新从checkpoint读取。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条