在当前的企业级数据处理中,主要分析的是CSV格式的数据。然而,需要认识到,在企业级应用中,大部分工作都是在实时环境中完成的,这就需要掌握流式处理实时数据的技能。为此,有Apache Spark提供的Spark Streaming技术。本文将聚焦于Spark Streaming的理论层面,以帮助读者理解如何使用这项技术。
在先前关于PySpark的文章中,已经详细介绍了PySpark的DataFrame操作和MLIB库,通过许多文档示例学习了不同的算法,并了解了如何在现实世界中实现它们。同时,还使用PySpark完成了多个基于咨询的项目。现在,是时候转向更高级的Spark主题了,从Spark Streaming开始。到目前为止,处理的都是系统中本地存在的数据集,无论是在本地还是云端,即数据集并不是实时访问的。由于这个限制,Spark Streaming应运而生,使能够实时分析并提取洞察。这也是称之为“流处理”的原因。
这是对Spark Streaming的高层次介绍。在接下来的文章中,将深入探讨这个概念,比如它在后端的工作原理、它的类型以及更多。根据Databricks的数据,Spark Streaming不仅仅是处理实时数据(如Twitter开发者API),也可以处理批处理数据集,尽管有其他库和工具存在,但它被广泛用于流处理。让讨论一下它的一些主要特性。
可扩展性:之前讨论的内容隐含了这一点;当谈论流处理时,意味着它需要实时数据,因此管道需要是可扩展的,只有这样目的才能实现。
容错性:Spark Streaming的容错能力的秘密在于其工作节点,它们建立在Spark之上,因此与Spark类似,它处理高正常运行时间和突发故障检测。
负载均衡:在处理实时数据时,必须注意处理高数据流量。有负载均衡器这个选项。可以通过它将流量平均分配给每个资源;获得了两个目标,一个是合理使用资源,另一个是处理高数据流量。
流处理与静态数据:Spark Streaming的组合可以处理静态数据集和实时数据集。为此,需要使用交互式查询,为最终用户提供原生支持。
注意:Spark Streaming只是核心Spark API的另一个扩展。
Spark Streaming的工作原理是什么?在深入探讨Spark Streaming之前,让先了解现代分布式系统的工作原理:接收数据:这是数据摄取过程,实时/静态数据被接收(例如,来自IoT设备)并被摄取到任何系统,如Amazon Kinesis或Apache Kafka。处理数据:在实时处理中,数据在集群上并行处理。这种方法有效地高效地处理流数据。输出:数据处理完毕后,需要将数据收集为输出,存储在下游系统如Cassandra、Kafka和Hbase中。
现在让讨论Spark Streaming的工作原理以及它的架构模型;架构模型与传统模型相同,但有一些先进的工具和技术,将在进一步探讨:在Spark中,流数据首先从单个或多个源中摄取,例如通过网络(TCP套接字)、Kafka、Kinesis、IoT设备等。然后数据被推送到处理部分,Spark Streaming拥有多个由高吞吐量函数支持的复杂算法,如窗口、映射、连接、归约等。这个过程的最后一步是将数据推送到大型数据库和仪表板中,以开发分析解决方案,更具体地说,是实时仪表板,可以看到那些高级图表的实时数据可视化。还可以在流数据上使用PySpark的机器学习技术或图形处理。
让也讨论这个部分,因为它是了解Spark Streaming遵循哪种处理技术的关键!答案很简单,易于理解,因为都知道所有传统的实时流架构都使用批处理,Apache Spark也是如此。在这种方法中,Spark Streaming将简单地接收输入流,然后将它们分解成批次并并行处理。
Spark支持两种类型的流处理;一种是遗留项目,即已经讨论过的Spark模型;现在让了解另一种,即结构化架构。结构化流处理:与Spark Streaming不同,它在Spark SQL API/引擎之上工作。最好的部分是,不需要混淆计算批处理数据还是实时流数据,因为实现部分几乎相同。只要输入流接收到最终数据,结果就会不断更新;可以使用Dataset/DataFrame API在任何可用的语言(Python、Java、Scala等)中进行此类操作。
结构化流处理的架构模型:结构化流处理模型的主要思想是将其视为一个无界表(从无界,意思是没有限制存储记录的表,或者说,每当新数据到达时,它的大小就会增加)。这种格式使得实时流处理与批处理概念相同,使其在实现方面比其他流处理模型更容易一些。