Apache Spark Streaming - 每个公司每天都会产生几百万条数据。经过适当的分析,这些信息可以被用来得出有价值的商业策略并提高生产力。
直到现在,这些数据被消耗和存储在一个持久的。即使在今天,这也是一个重要的步骤,以便能够在以后对历史数据进行分析。然而,通常情况下,分析结果是需要实时的。难道仅仅是已经超过的参考值。
所谓的数据流,即从数以千计的数据源持续产生的数据,在它们最终进入持久化之前就已经可以被消耗掉了,而流速不会被大大降低。甚至有可能使用这样的流来训练神经网络。
在这篇文章中,我们将告诉你为什么你不应该错过Apache Spark和Apache Spark Streaming,如果你打算在你的组织中整合流处理。
什么是Apache Spark?
Apache Spark已经成为当今市场上最重要、性能最强的统一数据分析之一。该框架提供了一个数据处理和人工智能集成的整体解决方案。这使企业能够轻松地开发出高性能的数据管道,并使用海量数据流训练人工智能方法。
Apache Spark结合了几个部分相互依赖的组件。所以在一定程度上可以以模块化的方式部署。
Spark可以在其独立的集群模式下运行,在EC2、HadoopYARN、Mesos或Kubernetes上。
这里的数据可以来自流式来源,如Kafka,也可以来自静态数据源。到目前为止,支持的编程语言有Java、Scala、Python和R。这些是目前所有科学学科中最常用的语言,用于实现数据分析方法。
一个Spark集群是什么样子的?
Spark应用程序在集群上作为独立的进程集运行。集群上的Spark程序的协调者是所谓的 SparkContext对象。它控制各个Spark程序作为独立进程运行。
然后协调器连接到中央元素,即集群管理器,然后将资源分配给各个应用程序。
下图显示了一个典型的Spark集群及其所有组件的例子。

Apache Spark集群概述
实际的计算和数据存储就在节点上进行。这些进程,也被称为执行者,然后执行任务并将数据保存在内存或磁盘空间中。然后,该缓存可以被另一个节点访问。
Apache sparks底层技术--高性能的关键
Spark核心是底层的统一计算引擎,所有的Spark功能都建立在这个引擎上。它甚至可以对大数据集进行并行处理,从而确保非常高性能的进程。
下图显示了Apache Spark核心的API是如何组成的。

Apache Spark核心API
核心API由低级API和结构化API组成,低级API是指通过 "数据 "对对象进行操作。 弹性分布式数据集(RDDs) 和结构化的API,在这里所有的数据类型都被操作,并进行批量或流式作业。
各个Apache Spark API是如何工作的?
为了正确理解API的结构,必须将其组成部分放在一个历史背景下。
什么是RDD API?
RDD(弹性分布式数据集)API从第一个Spark版本开始实施,它是基于Scala集合API。
RDD是一组代表数据的Java或Scala对象,因此是Spark的构建块。它们的优点是编译时的类型安全和惰性。
所有更高级别的API都可以被分解成RDDs。使用这个API可以并行地进行各种转换。它们中的每一个都定义了一个要执行的操作,通过调用一个动作方法来调用,并创建一个新的RDD。然后,这代表了转换后的数据。
什么是Dataframe API?
数据框架API引入了一个更高层次的抽象。Spark的数据框架对应于Pandas的数据框架结构。它们建立在RDDs之上,代表二维数据和模式。它包含一个有序的列集合,每个不同的列可以由不同的数据类型组成。每个值都是由一个行和一个列的索引来决定的。
当数据在节点之间传输时,只有数据被传输。元数据是在一个独立于spark的模式注册表中管理的。这大大提高了Spark的性能和可扩展性。
该API适用于创建一个关系查询计划。因此,现在可以使用查询语言对数据进行操作。
什么是数据集API?
当使用数据集时,会失去编译时的类型安全。这是RDD API的一个优势。数据集API的创建是为了结合两种API的优势。因此,它是仅次于RDD API的第二重要的Spark API。
这个API的基础是集成编码器,它负责JVM对象和内部Spark SQL表示法之间的转换。
Apache Spark由哪些组件组成?
Spark是通过使用组件进行模块化扩展的。Spark包括各种任务的库,从SQL到流媒体和机器学习。所有的组件都是基于Spark核心的,它是大型数据集的并行和分布式处理的基础。我们将在后面解释这个API的详细情况,以及是什么让它的性能如此强大。
Apache Spark Spark SQL
通过这个组件,RDDs被转换为所谓的数据框架,即提供元数据信息。
整个过程由一个催化剂优化器完成,它以树的形式执行一个执行计划。
Apache Spark GraphX
这个框架可以用来对图进行高性能计算。这些操作可以并行运行。
Apache Spark MLlib/SparkML
通过MLlib组件,可以非常容易地构建机器学习管道。为此,可以使用现成的模型和常见的机器学习算法(分类、回归、聚类...)。因此,数据识别、特征提取和转换被结合在一个统一的框架中。
Apache Spark流媒体
Apache Spark Streaming实现并控制数据流的处理。然而,Apache Spark Streaming也可以处理来自静态数据源的数据。
在数据流的情况下,输入流从一个流数据源,如Kafka、Flume或HDFS,进入Apache Spark Streaming。
在那里,它被分解成批次并被送入Spark引擎进行并行处理。然后,最终结果可以输出到HDFS数据库和仪表盘。
下图说明了Apache Spark Streaming的原理。

Apache Spark流的原理
所有的组件都可以通过Apache Spark Streaming直接从流中消费。这个组件在这里起着至关重要的作用。它通过滑动窗口操作来协调请求,并调节数据流。由于所有的组件都是基于Spark核心API的,所以保证了绝对的兼容性。特别是在大数据领域,这可以提供一个决定性的性能奖励。