前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于spark streaming重新编译之后部署异常

关于spark streaming重新编译之后部署异常

作者头像
用户5252199
发布2022-04-18 14:19:52
2980
发布2022-04-18 14:19:52
举报

使用spark streaming开发的人员都知道,它的容错机制是通过checkpoint来实现的,但是checkpoint有一个问题,就是当线上在运行一个spark streaming那么这时候你在编译一下(平时也难免不了对代码进行修改编译),再次发布的时候就会报checkpoint反序列化异常的errors。

然后,如果将checkpoint目录删除在发布就可以了,但是删除了容错不就实效了么?在这里我以前的做法是将kafka offset值保存到了zookeeper中,但是这样问题是更严峻的,RDD如果异常的话那么DAG的血缘就断了,等于spark的容错就没有充分利用上

在这里,官方上面有一端描述了该问题的处理方式,我将其翻译如下:

如果正在运行的spark streaming 需要升级到新的程序,那么这里有两种机制实现

1、升级spark streaming 启动并于现有程序并行执行,这样一旦新的(接收到与旧的数据相同的数据)已经预热并且准备好了,旧的程序就可以关掉了,注意,这里用于支持将数据发送到两个目的地的数据源(既:早期的程序和新升级的应用程序)

2、将现在的运行的应用程序优雅的关闭 ( 见StreamingContext.stop(...) or JavaStreamingContext.stop(…) 选项) 确保在关闭前已经将接收到的数据处理完成,然后启动升级的应用程序,将会从刚才应用程序中断的同一点开始处理,请注意,这只能通过支持源端缓存(比如:kafka和Flume)输入源来完成,因为数据需要缓冲,而之前的程序宕机了,而新的应用程序还没有启动起来,并且如果从早期的checkpoint信息点重新开始,是无法完成预先升级的程序代码的,checkpoint本质上包含序列化后的Scala/Java/Python对象,并试图将对象进行反序列化为新的对象,修改的类可能会导致错误,在这种情况下,可以让升级的应用程序使用不同的checkpoint目录或者删除以前的检查点目录

总结两点:

1.在编译之后,线上的先不要停,将新的部署之后,在停掉旧的

2.手动的优雅关闭旧的,确保数据处理正常,然后启动新的

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

本文分享自 大数据技术博文 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档