Apache Spark Streaming 初学者教程:工作、架构和功能
已发表: 2020-02-27我们目前生活在一个每秒快速生成大量数据的世界。 如果对这些数据进行准确分析,则可以提供有意义和有用的结果。 它还可以在适当的时候为许多行业提供解决方案。
这些对旅游服务、零售、媒体、金融和医疗保健等行业非常有帮助。 许多其他顶级公司已经采用了数据分析,例如亚马逊在其平台上跟踪客户与不同类型产品的互动,或者由 Netflix 提供的实时接收个性化推荐的观众。
任何使用大量数据的企业都可以使用它,并且他们可以对其进行分析以改善其业务的整体流程并提高客户满意度和用户体验。 从长远来看,更好的用户体验和客户满意度为组织带来好处,从而扩大业务并获得利润。
目录
什么是流媒体?
数据流是一种将信息作为连续且稳定的流传输的方法。 随着互联网的发展,流媒体技术也在增加。
什么是 Spark 流式传输?
当数据连续到达一个未绑定的序列时,则称为数据流。 输入数据是稳定流动的,并且是通过流来划分的。 在将数据划分为离散单元之后,对数据进行进一步处理。 以低延迟对数据进行分析和处理数据称为流处理。
2013 年,Apache Spark 添加了 Spark Streaming。 数据摄取可能来自许多来源,例如 TCP 套接字、Amazon Kinesis、Apache Flume 和 Kafka。 在复杂算法的帮助下,完成了数据处理。 使用 window、join、reduce 和 map 等高级函数来表示处理。 实时仪表板、数据库和文件系统用于将处理后的数据推送到文件系统。

流的工作
以下是内部工作。 Spark Streaming 将实时输入数据流分成多个批次。 Spark Engine 用于处理这些批次以生成最终的流批次。
流中的数据被分成小批量,由 Apache Spark Discretized Stream (Spark DStream) 表示。 Spark RDDs 用于构建 DStreams,这是 Spark 的核心数据抽象。 Apache Spark 的任何组件(例如 Spark SQL 和 Spark MLib)都可以轻松地与 Spark Streaming 无缝集成。
Spark Streaming 有助于扩展实时数据流。 它是核心 Spark API 的扩展之一。 它还可以处理容错流和高吞吐量。 Spark Streaming 的使用对实时数据进行实时处理和流式传输。 世界上主要的顶级公司都在使用 Spark Streaming 的服务,例如 Pinterest、Netflix 和 Uber。
Spark Streaming 还提供实时数据分析。 数据的实时和快速处理在 Spark Streaming 的单一平台上执行。
另请阅读Apache Spark 架构
为什么选择 Spark Streaming?
Spark Streaming 可用于流式传输来自不同来源的实时数据,例如 Facebook、股票市场和地理系统,并进行强大的分析以鼓励业务。
Spark Streaming 有五个重要方面使其如此独特,它们是:
1. 整合
图形处理、机器学习、SQL 等高级库可以轻松与之集成。
2.组合
流式传输的数据可以与交互式查询以及静态数据集一起完成。
3.负载均衡
Spark Streaming 具有完美的负载平衡,这使得它非常特别。
4. 资源使用
Spark Streaming 以非常优化的方式使用可用资源。
5. 从落后者和失败者中恢复
Spark Streaming 可以从任何类型的故障或落后者中快速恢复。
需要 Apache Spark 中的流式传输
在设计用于处理传统数据流的系统时,使用了连续算子模型。 该系统的工作如下:
- 数据源用于流式传输数据。 不同类型的数据源是物联网设备、系统遥测数据、实时日志等等。 这些流数据被摄取到数据摄取系统中,例如 Amazon Kinesis、Apache Kafka 等等。
- 在集群上,对数据进行并行处理。
- Kafka、Cassandra、HBase等下游系统用于传递结果。
一组工作节点运行一些连续的运算符。 流式数据记录的处理一次完成一个。 然后将文档转发给管道中的下一个操作员。
Source Operators 用于从摄取系统接收数据。 Sink Operators 用于向下游系统提供输出。
一些运算符是连续的。 这是一个自然而直接的模型。 在大规模实时复杂数据分析方面,传统架构在现代世界面临一些挑战,它们是:
快速故障恢复
在当今的系统故障中,通过在并行节点中计算丢失的信息来恢复丢失的信息,很快就会伴随和适应故障。 因此,与传统系统相比,它使恢复速度更快。
负载均衡器
负载均衡器有助于以更有效的方式在节点之间分配资源和数据,以便没有资源在等待或什么都不做,而是将数据均匀地分布在整个节点中。
交互式、批处理和流式工作负载的统一
还可以通过对流数据进行查询来与流数据交互。 它也可以与静态数据集结合使用。 不能使用新运算符进行临时查询,因为它不是为连续运算符设计的。 交互式、流式和批处理查询可以通过使用单一引擎进行组合。
使用 ML 进行 SQL 查询和分析
使用通用数据库命令开发系统使开发人员的生活更容易与其他系统协作。 社区广泛接受 SQL 查询。 系统提供可用于高级分析目的的机器学习模块和库。
Spark 流式处理概述
Spark Streaming 使用一组 RDD 来处理实时数据。 因此,Spark Streaming 通常用于处理实时数据流。 Spark Streaming 提供实时数据流的容错和高吞吐量处理。 这是核心 spark API 附带的一项额外功能。

火花流功能
- 业务分析:使用 Spark Streaming,还可以了解观众的行为。 这些学习以后可以用于企业的决策。
- 集成:实时和批处理与 Spark 集成
- 容错——Spark的独特能力是它可以有效地从故障中恢复。
- 速度: Spark 实现低延迟
- 扩展: Spark 可以轻松地将节点扩展到数百个。
Spark Streaming 基础知识
1. 流式上下文
在 Spark 中,数据流由 Streaming Context 消费和管理。 它创建了一个 Receiver 对象,该对象是通过注册一个 Input 流来产生的。 因此,主要的 Spark 功能成为系统的关键入口点,因为它提供了许多上下文,为 Akka Actor、Twitter 和 ZeroMQ 等不同来源提供默认工作流。
阅读: Apache Spark 在大数据中的作用及其独特之处
火花上下文对象表示与火花簇的连接。 在 Spark Streaming 对象由 StreamingContext 对象创建的情况下,累加器、RDD 和广播变量也可以由 SparkContex 对象创建。
2. 检查点、广播变量和累加器
检查站
Checkpoint 的工作方式类似于 Checkpoints,后者存储与游戏中相同的系统状态。 在这种情况下,检查点有助于减少资源损失并使系统对系统故障更具弹性。 检查点方法是跟踪和保存系统状态的更好方法,以便在恢复时可以轻松地将其拉回。
广播变量
它不是向网络节点提供任务的完整副本,而是始终捕获一个只读变量,该变量负责确认存在的不同任务的节点,从而降低各个节点的传输和计算成本。 因此它可以更有效地提供重要的输入集。 它还使用高级算法将广播变量分发到网络中的不同节点; 从而降低了通信成本。
蓄能器
累加器是可以为不同目的定制的变量。 但也存在已经定义的累加器,如计数器和总和累加器。 还有跟踪累加器,跟踪每个节点,还可以添加一些额外的功能。 数字累加器支持 Spark 也支持的许多数字功能。 也可以根据用户的要求创建自定义的累加器。
数据流
DStream 表示离散流。 Spark Streaming 提供了必要的抽象,称为离散流 (DStream)。 DStream 是一种连续流动的数据。 从数据源接收 DStream。 它也可以从经过处理的数据流中获得。 输入流的转换生成处理后的数据流。
在指定的时间间隔后,数据将包含在 RDD 中。 Endless 系列的 RDD 代表一个 DStream。
缓存
开发者可以使用 DStream 将流的数据缓存在内存中。 如果在 DStream 中多次计算数据,这很有用。 它可以通过在 DStream 上使用 persist() 方法来实现。
进行数据复制是为了确保具有弹性系统的安全性,该系统可以抵抗系统中的故障,从而能够容忍系统中的故障(例如 Kafka、Sockets、Flume 等)
Spark Streaming 优势与架构
一次处理一个数据流有时会很麻烦; 因此 Spark Streaming 将数据离散化为易于管理的小子批次。 这是因为 Spark 工作人员并行获取 Spark Streaming 接收器接受的数据缓冲区。 因此整个系统并行运行批次,然后累积最终结果。 然后这些短任务由 Spark 引擎批量处理,并将结果提供给其他系统。
在 Spark Streaming 架构中,计算不是静态分配和加载到节点,而是基于数据的局部性和资源的可用性。 因此,与以前的传统系统相比,它减少了加载时间。 因此利用数据局部性原理,也更容易进行故障检测和恢复。
Spark 中的数据节点通常由 RDD 表示,即 Resilient Distribution Dataset。
Spark Streaming 的目标
以下是 Spark 架构实现的目标。
1.动态负载均衡
这是 Spark Streaming 的基本特性之一,其中数据流由负载均衡器动态分配,负载均衡器负责使用其中定义的特定规则分配数据和计算资源。 负载平衡的主要目标是在工作人员之间有效地平衡工作负载,并将所有内容以并行方式放置,以免浪费可用资源。 并且还负责为系统中的工作节点动态分配资源。
2. 故障与恢复
与传统系统一样,当发生操作故障时,整个系统必须重新计算该部分以恢复丢失的信息。 但是当一个节点处理所有这些恢复并使整个系统等待其完成时,问题就来了。 而在 Spark 中,丢失的信息由其他空闲节点计算并带回系统进行跟踪,而无需像传统方法那样进行任何额外的等待。
并且失败的任务被均匀地分布在系统中的所有节点上,以比传统方法更快地重新计算并从失败中恢复。
3.批量和交互式查询
Spark 中的一组 RDD 被称为 Spark 中的 DStream,它提供了流式工作负载和批处理之间的关系。 这些批次存储在 Spark 的内存中,这提供了一种高效的方式来查询其中存在的数据。
Spark 最好的部分是它包含了各种各样的库,可以在 Spark 系统需要时使用。 这些库的名称很少是用于机器学习的 MLlib、用于数据查询的 SQL、GraphX 和 Data Frame,而 Dataframe 和问题可以通过 DStreams 转换为等效的 SQL 语句。
4. 性能
由于 spark 系统使用任务的并行分布来提高其吞吐能力,从而利用能够实现低至 100 毫秒的低延迟的 spark 引擎。
Spark Streaming 是如何工作的?
流中的数据被分成小批量,在 Spark Streaming 中称为 DStreams。 它是内部的 RDD 序列。 RDDS 使用 Spark API 来处理数据,并作为结果返回货件。 Spark Streaming 的 API 在 Python、Java 和 Scala 中可用。 Spark 1.2 中最近引入的 Python API 缺少许多功能。
有状态计算称为由 Spark Streaming 基于流中的传入数据维护的状态。 在流中流动的数据在一个时间范围内进行处理。 此时间范围由开发人员指定,并且由 Spark Streaming 允许。 时间窗口是应该完成工作的时间范围。 时间窗口在一个时间间隔内更新,这个时间间隔也称为窗口内的滑动间隔。
Spark 流式传输源
与输入 DStream 相关的 Receiver 对象,将接收到的数据存储在 Sparks Memory 中进行处理。
内置流有两类:
1. 基本来源
Streaming API 中可用的源,例如套接字连接和文件系统。
2.进阶源码
高级来源是 Kinesis、Flume 和 Kafka 等。
流媒体操作
Spark RDDS 支持两种类型的操作,它们是:-
1. Apache Spark 中的输出操作
输出操作用于将 DStream 的数据推送到外部系统,如文件系统或数据库。 输出操作允许外部系统使用转换后的数据。 所有的 DStreams 转换实际上都是由触发执行的,触发是由外部系统完成的。
这些是当前的输出操作:
foreachRDD(func), [suffix]), saveAsHadoopFiles(prefix, [suffix]), saveAsObjectFiles(prefix, [suffix])”prefix-TIME_IN_MS[.suffix]”, saveAsTextFiles(prefix, print()
RDD 懒惰地执行输出操作。 在 Output 的 DStream Operations 内部,强制执行 RDD Actions 对接收到的数据进行处理。 输出操作的执行一次完成。 Spark 应用程序定义了输出操作的执行顺序。
2.火花变换
Spark 转换还会更改 DStream 中的数据,因为 RDD 在 Spark 中支持它。 与 Spark RDD 一样,DStream 支持许多更改。

以下是最常见的转换操作:
Window(), updateStateByKey(), transform(), [numTasks]), cogroup(otherStream, [numTasks]), join(otherStream, reduceByKey(func, [numTasks]), countByValue(), reduce(), union(otherStream )、count()、repartition(numPartitions)、filter()、flatMap()、map()。
结论
在当今数据驱动的世界中,存储和分析数据的工具已被证明是业务分析和增长的关键因素。 事实证明,大数据及相关工具和技术的需求不断增长。 因此,Apache Spark 拥有巨大的市场,并为客户和企业提供了强大的功能。
如果您有兴趣了解有关大数据的更多信息,请查看我们的 PG 大数据软件开发专业文凭课程,该课程专为在职专业人士设计,提供 7 多个案例研究和项目,涵盖 14 种编程语言和工具,实用的动手操作研讨会,超过 400 小时的严格学习和顶级公司的就业帮助。
从世界顶级大学在线学习软件开发课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。