入门Apache Spark时,你需要知道的事情-基本介绍和底层原理解析

239 阅读6分钟

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集群及其所有组件的例子。

The figure  shows an example of a typical Spark cluster with all its components.

Apache Spark集群概述

实际的计算和数据存储就在节点上进行。这些进程,也被称为执行者,然后执行任务并将数据保存在内存或磁盘空间中。然后,该缓存可以被另一个节点访问。

Apache sparks底层技术--高性能的关键

Spark核心是底层的统一计算引擎,所有的Spark功能都建立在这个引擎上。它甚至可以对大数据集进行并行处理,从而确保非常高性能的进程。
下图显示了Apache Spark核心的API是如何组成的。

The  figure shows how the Apache Spark Core APIs are composed.

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的原理。

The figure illustrates the principle of Apache Spark Streaming.

Apache Spark流的原理

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