Spark Structured Streaming多流multiple streams)多查询(multiple queryies)问题

推荐:博主历时三年倾注大量心血创作的《大数据平台架构与原型实现:数据中台建设实战》一书已由知名IT图书品牌电子工业出版社博文视点出版发行,真诚推荐给每一位读者!点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,扫码进入京东手机购书页面!

在这里插入图片描述

 

 

Structured Streaming作为Spark新一代的流计算编程模型,针对流计算提供了很多新的的高级的API进行支持,这使得它比DStream要好用的多,同时编码量也大幅度地减少,但是在当前版本V2.3下, Structured Streaming无法支持 多流(multiple streams) 多查询 (multiple queryies)是非常头痛的一个问题。

在流计算中,一个非常普遍的场景是:我们从Kafka中拿到raw data进行了初步的ETL之后,会以这个Dataset为一个base(或者叫trunk)的stream, 然后分成两个分支去处理,一条分支是将处理好的数据直接持久化到NoSQL数据库,另一个分支是要进行某些流计算相关的分析,例如某种基于时间窗口的聚合运算,并把分析结果也写入到的NoSQL数据库。这是一类非常典型的具有分支特性的流,在基于DStream的编程模型上,我们可以依靠DStream的cache方法这实现这个需求,把base stream缓存之后,相当于保存了一个进行分支前的流的副本,后续的分支可以以个副本为基准进行后续的操作,而不是会受到另一个分支的影响。但是让人遗憾的是,当前的Structured Streaming不支持cache操作,具体参考:https://issues.apache.org/jira/browse/SPARK-20927

目前已知的一个替代方法是使用Dataset的createTempView方法来创建一个临时视图,然后分支操作,即分支Query都基于这个临时视图展开。要实现这个目标,还做一个重要的动作:不能使用Query的awaitTermination,因为之会阻塞第二个分支Query的执行,而应该在所有的Query执行完start之后,使用sparkSession.streams.awaitAnyTermination(),只有这样才能确保两个分支Query都能启动。

期待在cache功能就绪前,有更佳解决方案的同学留言。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laurence 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值