16 | Spark Streaming:Spark的实时流计算API
蔡元楠
该思维导图由 AI 生成,仅供参考
你好,我是蔡元楠。
今天我要与你分享的内容是“Spark Streaming”。
通过上一讲的内容,我们深入了解了 Spark SQL API。通过它,我们可以像查询关系型数据库一样查询 Spark 的数据,并且对原生数据做相应的转换和动作。
但是,无论是 DataFrame API 还是 DataSet API,都是基于批处理模式对静态数据进行处理的。比如,在每天某个特定的时间对一天的日志进行处理分析。
在第二章中你已经知道了,批处理和流处理是大数据处理最常见的两个场景。那么作为当下最流行的大数据处理平台之一,Spark 是否支持流处理呢?
答案是肯定的。
早在 2013 年,Spark 的流处理组件 Spark Streaming 就发布了。之后经过好几年的迭代与改进,现在的 Spark Streaming 已经非常成熟,在业界应用十分广泛。
今天就让我们一起揭开 Spark Streaming 的神秘面纱,让它成为我们手中的利器。
Spark Streaming 的原理
Spark Streaming 的原理与微积分的思想很类似。
在大学的微积分课上,你的老师一定说过,微分就是无限细分,积分就是对无限细分的每一段进行求和。它本质上把一个连续的问题转换成了无限个离散的问题。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Spark Streaming是Spark的实时流计算API,通过将连续的流数据按时间间隔划分为数据块,并对每个数据块进行批处理来实现流处理。其原理类似于微积分的思想,将连续的问题转换为无限个离散的问题。Spark Streaming提供了DStream抽象,由一系列连续的RDD序列组成,支持RDD的所有转换操作,同时还有特有的滑动窗口操作。优点包括基于RDD实现、数据容错性、运行速度和与Spark生态的无缝衔接,但缺点是实时计算延迟较高。在优化Spark Streaming程序时,可以从多个角度入手。总体而言,Spark Streaming是一个处理速度快、数据容错性好的流处理组件,但在实时延迟方面相对其他流处理框架较高。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大规模数据处理实战》,新⼈⾸单¥59
《大规模数据处理实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(11)
- 最新
- 精选
- Hobbin老师,Spark团队对Spark streaming更新越来越少,Spark streaming存在使用Processing time 而非 Event time,批流代码不统一等问题,而Structured streaming对这些都有一定改进。所以Structure streaming 会替代Spark streaming或者Flink,成为主流的流计算引擎吗?
作者回复: 你说的很对,Structured streaming是Spark流处理的未来,所以我在第17讲以及之后的实战演练才重点介绍了它。此处介绍spark streaming一来是因为它的原理很基本也很重要,二来它承接了之前介绍的RDD API。 所以我觉得Structured Streaming会替代Spark Streaming,但是很难替代Flink。Flink在流处理上的天然优势很难被Spark超越,让我们拭目以待Strucutred Streaming未来会如何发展。
2019-05-24632 - lwenbin没用过spark streaming, 用storm比较多。 觉得流处理关键在于要在窗口内尽快地把到来的数据处理完,不要造成数据堆积,内存溢出。 其中牵涉到了如何高效地接受数据,如何并行尽快地处理数据。 觉得优化可以从:接受输入,处理算法,处理单元数量,GC调优等方面入手吧。 有个问题,对于RDD如果transform链很长,感觉是否会对性能造成一定影响,特别是流式或者图形计算?老师能否解答一下。 谢谢!
作者回复: 如果transform链很长,在流处理中确实会影响处理的实时性,你的想法是对的。如果只有一条很长的链,在Spark的框架中,也很难去优化。
2019-05-2429 - hua168批处理可以选择spark;流处理:spark stream,storm,Flink;还有现在大统一的beam 请问:这些技术都要学一遍吗?精力放在哪个技术上? 如果我是初学者,我能直接学beam其它都不学吗?2019-05-24217
- 邱从贤※klion26上一条留言没有说完。 spark streaming 需要设置 batch time 是多少,这决定时效性,以及调度的 overhead,另外要看自己需要的吞吐多大,并发是不是有特殊需求。 spark streaming 有几个点不太喜欢,修改业务逻辑后,需要删除 checkpoint 才行,这会导致从头计算;慢节点没法解决,当一个 batch 里面有一个节点很难的时候,整个 batch 都无法完成。 一个反常识的点:实时 etl 同样吞吐下,flink 比 spark streaming 更节省资源。 另外官方已经放弃 spark streaming,转向structured streaming,但是从邮件列表看又没有 commiter 在管,导致 pr 没人 review,或许这和 spark 整体的重心或者方向有关吧2019-05-2614
- Fiery既然DStream底层还是RDD,那我认为针对RDD的一些优化策略对DStream也有效。比如平衡RDD分区减少数据倾斜,在tranformation链中优先使用filter/select/first减少数据量,尽量串接窄依赖函数方便实现节点间并行计算和单节点链式计算优化,join时优化分区或使用broadcast减少stage间shuffle。 另外专门针对流数据的处理,个人经验上主要是要根据业务需求微调window length和sliding interval以达到吞吐量和延时之间的一个最优平衡,时间窗口越大,一个RDD可以一次批处理的数据就越多,Spark的优势就可以发挥出来,吞吐量就上去了。而滑动间隔越大,windowed DStream在固定时间内的RDD就越少,系统的任务队列里同时需要处理的计算当然就越少,不过这两个调整都会加大数据更新延迟和牺牲数据实时性,所以说要根据业务真实需求谨慎调整。 不过个人理解RDD里面用来避免重复计算的cache和persist无法用来减少窗口滑动产生的重复计算,因为窗口每滑动一次,都产生一个新的RDD,而persist只针对其中某个RDD进行缓存,在RDD这种low level api里面,应该是无法知道下个窗口中的RDD和现在的RDD到底有多少数据是重叠的。对于这点理解是否正确望老师解答!2020-03-117
- Ming优化的定义很广,不知道在这个领域大家提到这个词主要指的是什么?望解答 不过,对具体实现细节不了解的情况下有几个猜测: 我会改变时间粒度,来减少RDD本身带来的开销,上文的例子里时间粒度如果设置成10秒应该逻辑上也是可行的。 另外,我大概会考虑多使用persist来减少因为窗口滑动产生的重复计算。2019-05-2413
- 不记年在满足需求的情况下尽可能的使用更宽的窗口长度,减少rdd的处理链2020-03-301
- 渡码稳定性:对于7*24小时的流式任务至关重要 低延迟高吞吐量2019-05-281
- skybird嗨,有人吗?第三行代码应该是ssc: lines = ssc.socketTextStream("localhost", 9999) ??2023-05-14归属地:广东
- 王翔宇🍼sc和ssc的区别是什么?我理解ssc才是那个streamingContext吧,如果是这样,那么又出现错误了。2019-07-12
收起评论